Hibernate中createCriteria(QBC)查询的用法

现在假设有一个Student类,内有id,name,age属性 
String hql = "from Student s"; 
按照以前的做法,我们通常是 
Query query = session.createQuery(hql); 
或者要按照条件检索的话. 
String hql = "from Student s where s.name like ‘王%‘" 
Query query = session.createQuery(hql); 
不用HQL而使用QBC的话,那么代码为: 
Criteria criteria =session.createCriteria(Student.class); 
Criterion criterion = Expression.like("name","王%"); 
这样还看不出来.那我们把检索条件加上年龄为22. 
HQL: 
String hql = "from Student s where s.name like ‘王%‘ and s.age= 22 "; 
Query query = session.createQuery(hql); 
List list = query.list(); 
QBC: 
Criteria criteria =session.createCriteria(Student.class); 
Criterion criterion1 = Expression.like("name","王%"); 
Criterion criterion2 = Expression.eq("age",newInteger(22)); 
criteria.add(criterion1).add(criterion2); 
List list = criteria.list();

看上去烦琐很多.但是做过项目的人都知道,当一个模块业务逻辑发生改变的时候,往往要重写sql,最烦也是最讨厌的就是拿着别人的hql或者sql,两眼瞪的溜园找到底要修改什么地方呢? 
如果使用QBC大大的增加了代码的可读性,以及可维护性. 
需要注意的是null值 
比如我们要查找姓名为null的Student对象时应该这么写 
Criteria criteria =session.createCriteria(Student.class); 
Criterion criterion = Expression.isNull("name"); 
criteria.add(criterion).list(); 
以及使用between...and的时候 
Criteria criteria =session.createCriteria(Student.class); 
Criterion criterion1 = Expression.ge("age",new Integer(20));//下限 
Criterion criterion2 = Expression.le("age",new Integer(25));//上限 
//这里也可以把上述两个条件添加到第三个条件里 
Criterion criterion3 =Expression.and(criterion1,criterion2); 
criteria.add(criterion3).list(); 
相当于from Student s where s.age between 20 and 25 
等同于from Student s where s.age >= 20 and s.age <=25

下面是就HQL和QBC常用的查询条件做的比较 
表达式含义                                     HQL                                     QBC 
大于等于                                         >=                                        Expression.ge() 
大于                                                 >                                         Expression.gt() 
小于等于                                         <=                                        Expression.le() 
小于                                                 <                                         Expression.lt() 
等于                                                 =                                         Expression.eq() 
不等于                                             <>或者!=                            Expression.ne()

为空                                                 is null                             Expression.isNull() 
不为空                                             is notnull                        Expression.isNotNull() 
在指定范围内                                 betweenand                        Expression.between() 
不在指定范围                                 not betweenand                Expression.not(Expression.between()) 
属于某个集合                                 in                                        Expression.in() 
不属于某个集合                             notin                                 Expression.not(Expression.in()) 
与                                                    and                                     Expression.and() 
或                                                    or                                        Expression.or() 
非                                                    not                                     Expression.not() 
模糊查询                                        like                                    Expression.like

时间: 2024-10-12 02:51:15

Hibernate中createCriteria(QBC)查询的用法的相关文章

Hibernate中的QBC查询

QBC 查询方式(Query By Criteria) public void testQBCQuery1(){ Criteria criteria=session.createCriteria(Student.class); List<Student> studentList=criteria.list(); Iterator it=studentList.iterator(); while(it.hasNext()){ Student s=(Student)it.next(); Syste

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

现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = session.createQuery(hql);或者要按照条件检索的话.String hql = "from Student s where s.name like '王%'"Query query = session.createQuery(hql);不用HQL而使用QBC的话,那么代码为

(转)Hibernate中的Query一些基本用法

/*** 添加*/public void save(Stu stu){ try { tran=this.GetSession().beginTransaction(); this.GetSession().save(stu); tran.commit(); } catch (HibernateException e) { throw e; }finally{ this.CloseSession(); }} /*** 使用HQL全查询*/public List getallbyHQL(){ Lis

分享知识-快乐自己:Hibernate 中Criteria Query查询详解

1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象. 在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Cr

Hibernate中的条件查询完毕类

Hibernate中的条件查询有下面三个类完毕: 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询条件的工具类

Hibernate中的条件查询完成类

Hibernate中的条件查询有以下三个类完成: 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询条件的工具类 Hibernate中的条件查询完成类

Hibernate-ORM:11.Hibernate中的关联查询

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述Hibernate中的关联查询,及其级联(cascade)操作,以及指定哪一方维护关联关系的(inverse) 一,讲述目录如下: 1.单向一对多:(增加一个区县及其它以下的对应街道) 2.单项一对多:(查询一个区县,以及它下面所有的对应街道) 3.单项多对一:(查询一个指定的街道,并同时展示出其对应的区县) 4.双向一对多(多对一):(值得注意:toString()套路不对容易引发错误Err

Hibernate 中Criteria Query查询详解【转】

当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象.在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中.这样,程序员可以不使用SQL甚至HQL的情况下进行

Hibernate中使用子查询

子查询: 子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一条SQL语句的查询结果,在Hibernate中HQL查询同样对子查询功能提供了支持. 如下面代码所示: List list=session.createQuery("from Customer c where 1>(select count(o) from c.orders o)").list(); 上面的程序查询订单数超过1的所有客户,因此和上面子查询HQL语句对应的SQL语句为: Select *

hibernate 中createQuery与createSQLQuery的用法

hibernate 中createQuery与createSQLQuery两者区别是:前者用的hql语句进行查询,后者可以用sql语句查询前者以hibernate生成的Bean为对象装入list返回后者则是以对象数组进行存储 比如我们在获得session后: createQuery: try{ Session session=this.hibernateTemplate.getSessionFactory().getCurrentSession(); //这里的表名dcn_flow是数据库里的表