Hibernate 之 org.hibernate.Criteria

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()+"\t"+user.getPassword()+"\t"+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

 

posted on 2015-09-11 16:10  redSunflower  阅读(324)  评论(0编辑  收藏  举报

导航