1.概念区分 Criteria Criterion Restrictions
Criteria:代表一次查询。
Criterion:代表一个条件查询。
Restrictions:产生条件查询的工具类。
2.进行一次查询的步骤
1. 获取Hibernate的Session对象。
2. 以Session对象创建Criteria对象。
3. 使用Restrictions的静态方法创建Criterion查询条件。
4. 向Criteria添加Criterion查询条件。
5. 执行Criteria的list等方法返回结果
代码示例:
1 Configuration c = new Configuration().configuration(); 2 SessionFactory sf = c.buildSessionFactory(); 3 Session s = sf.openSession(); 4 Criteria t = s.createCriteria(User.class);//物件表名是User; 5 t.add(Restrictions.gt("age", "20"));//选择age>20 6 t.add(Restrictions.lt("age", "30"));//选择age<30 7 t.addOrder(Order.desc("age"));//排序 8 List users = t.list(); 9 for(Iterator it = user.iterator();it.hasnext()) 10 { 11 User user = (User)it.next(); 12 System.out.println(user.getUsername()+" "+user.getPassword()+" "+user.getAge()); 13 }
3. 复杂查询
3.1 Restrictions里面常用的方面具体如下
Restrictions.eq--->等於
Restrictions.gt--->大于
Restrictions.ge--->大於等於 >=
Restrictions.lt--->小於 <
Restrictions.le--->小於等於 <=
Restrictions.between--->对应SQL的BETWEEN子句
Restrictions.like--->对应SQL的LIKE子句
Restrictions.in--->对应SQL的in子句
Restrictions.and--->and关系
Restrictions.or--->or关系
3.2 排序
您可以使用Criteria进行查询,并使用org.hibernate.criterion.Order对结果进行排序,例如使用Oder.asc(),指定根据”age”由小到大排序(反之则使用desc()):
Criteria criteria = session.createCriteria(User.class); criteria.addOrder(Order.asc("age"));
List users = criteria.list();
注意在加入Order条件时,使用的是addOrder()方法,而不是add()方法,在产生SQL语句时,会使用order by与asc(desc)来进行排序指定.
对应的sql语句为:Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ order by this_.age asc
3.3 分页查询
Criteria的setMaxResults()方法可以限定查询回来的笔数,如果配合setFirstResult()设定传回查询结果第一笔资料的位置,就可以实现简单的分页,例如传回第51笔之后的50笔资料(如果有的话):
Criteria criteria = session.createCriteria(User.class);criteria.setFirstResult(51);criteria.setMaxResults(50);List users = criteria.list();
根据您所指定得资料库,Hibernate将自动产生与资料库相依的限定笔数查询子句,例如在MySQL中,将使用limit产生以下的SQL语句:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ limit ?, ?
3.4 统计函数
您可以对查询结果进行统计动作,使用org.hibernate.criterion.Projections的统计函数,avg()、rowCount()、count()、max()、min()、 countDistinct()等方法。
操作步骤:
1. 生成Projection
2. 使用setProjection向Criteria添加Projection。
1 Projection p = Projections.rowCount(); 2 Criteria.setProjection(p);
3.5 分组 http://jingyan.baidu.com/article/0964eca233d7cf8284f53656.html