Hibernate的QBC查询有多个条件模糊查询怎么实现的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate的QBC查询有多个条件模糊查询怎么实现的?相关的知识,希望对你有一定的参考价值。

Criteria查询,有多个条件,名称,描述,价格,数量....模糊查询,条件都有可能为空,
请问是先把条件封装了再调用Criteria查询方法吗? 具体怎么实现的呢?

用不用框架思路都差不多 遍历所有需要判断的属性 如果有值就添加条件  无值就下一个


for(属性 xxx:全部属性)

    if(xxx!=null)
        criteria.add(Restrictions.like(xxx,yyyy));

criteria.list();

参考技术A Criteria criteria = this.getSession().createCriteria(Fen.class);
criteria.createAlias("emp", "e");
criteria.add(Restrictions.like("e.company","%"+fq.getEmp().getCompany()+"%"));

hibernate框架学习之数据查询(QBC)

lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数

lQBC查询方式步骤

•获取Session对象

•初始化Criteria对象(使用Session对象创建)

•由Session对象创建

•传入要查询的数据模型类

•添加各种查询条件

•执行查询返回结果(返回单条数据或集合数据)


lQBC查询格式非常简单,更符合编程人员的习惯

image

•Criteria对象用于由Session对象创建,传入要查询的PO类

•Criteria c = s.createCriteria(TeacherModel.class);


lQBC的查询结果与HQL相同分为两种

•查询结果为多条数据使用list方法获取集合

•查询结果为单一数据使用uniqueResult方法获取对象


分页查询

lQBC查询中的分页格式与HQL中使用的分页格式完全相同,通过方法设定参数完成

•setFirstResult(int);

•setMaxResults(int);


QBC——查询结果排序

lQBC查询结果排序相对于HQL简化很多

image

•为Criteria对象创建的查询结果排序只需要为其添加排序规则

•c.addOrder(排序规则);

•排序规则是Order对象的常量,传入对象中排序的属性

•c.addOrder(Order.desc("age"));

•Order.desc(String)是排序规则,age是排序字段

•排序规则可以设定多个,由添加顺序决定主副排序顺序


QBC——条件查询(重点)

lQBC条件查询是QBC查询中最强大的功能,由于格式由SQL语句转化为对象化操作,因此需要掌握转化后的对应关系与书写规则

lQBC将所有的查询条件封装成面向对象的操作,从格式上初期接受起来比较困难


QBC——条件查询规则

image


QBC——条件查询规则

lHQL与QBC条件运算符对应关系

image

image


QBC——条件查询示例

l查询年龄小于30岁的学生

•c.add(Restrictions.lt("age", 30));

l查询年龄不小于30岁的学生

•c.add(Restrictions.not(Restrictions.lt("age", 30)));

•c.add(Restrictions.ge("age", 30));

l查询年龄小于35岁,职业技能中包含“剑”的学生

•c.add(Restrictions.and(Restrictions.lt("age", 45), Restrictions.like("skill", "%剑%")));


QBC——多表关联查询

l查询教师“李若亮的所有学生”

image

•无法查找到teacher.teacherName属性

l使用别名引用teacher.teacherName对象图导航

image

•使用别名t表示StudentModel类中的被关联的属性teacher,然后进行对象图导航格式进行条件设置

别名的定义是为了关联到对应的对象


HQL与QBC比较

l当业务十分简单时,推荐使用HQL查询

l当进行复杂条件查询时,推荐使用QBC查询

l如果考虑到业务分层时的耦合度降低,抛弃离线查询DetachedCriteria,改用Model传参,扔可使用Criteria进行查询

l基于性能考虑,在必须使用Hibernate时,HQL从各个方面,包括复杂条件查询,整体性能优于QBC查询,可以考虑抛弃Criteria查询模式

以上是关于Hibernate的QBC查询有多个条件模糊查询怎么实现的?的主要内容,如果未能解决你的问题,请参考以下文章

hibernate查询之条件查询

hibernate查询有几种方式

hibernate框架学习之数据查询(QBC)

hibernate有几种查询方式

Hibernate(十五):QBC检索和本地SQL检索

Hibernate中createCriteria即QBC查询的详细用法