Hibernate Criteria查询

Session s = HibernateSessionFactory.getSession();
Criteria c = s.createCriteria(PetInfo.class);



查询所有数据:
Criteria c = s.createCriteria(Student.class);



List list = c.list();





精确查询:
c.add(Restrictions.eq("id",new Integer(22)));



模糊查询:
c.add(Restrictions.like("name","%2%"));



条件查询:
c.add(Restrictions.ge("id",new Integer(9)));



范围查询:
c.add(Restrictions.between("id",new Integer(5),new Integer(8)));



逻辑语句:
and:
c.add(Restrictions.ge("id",new Integer(6)));
c.add(Restrictions.le("age",new Integer(16)));
or:
c.add(Restrictions.or(Restrictions.ge("id",new Integer(6)),Restrictions.le("age",new Integer(16))));
not:
c.add(Restrictions.not(Restrictions.ge("id",new Integer(6))));

//分页
c.setFirstResult(3);  //从第几行开始取数据
c.setMaxResults(3);   //总共取多少行数据
List list = c.list();



排序:
c.addOrder(Order.desc("id"));



分组:
c.setProjection(Projections.groupProperty("age"));



查询的结果只有一个值时:
Object obj = c.uniqueResult();



统计函数的使用:
avg() rowCount() count() max() min() countDistinct()
c.setProjection(Projections.avg("age"));



在SQL语句中的多条件分组与统计功能,
可以利用ProjectionList类来实现:
Criteria c=session.createCriteria(User.class);
ProjectionList prolist=Projections.projectionList();
prolist.add(Projections.groupProperty("age"));
prolist.add(Projections.rowCount());
c.setProjection(prolist);
通过以上代码,实现了对不同年龄人员数量的分组统计,
当进行检索时,Hibernate会生成类似如下的SQL语句:
Select age,count(*) from user group by age;

在Hibernate3中DetachedCriteria类的使用:
构造常用的查询条件,需要的时候与session关联
(与PreparedStatement类似)
DetachedCriteria dc= DetachedCriteria.forClass(User.class);
dc.add(Expression.eq("name","zhaoxin"));
dc.add(Expression.eq("sex","1"));
Criteria c=dc.getExecutableCriteria(session);
Iterator it=c.list().iterator();
注意:
DetachedCriteria的生存周期与session实例无关,
当需要进行检索时,通过getExecutableCriteria(session)方法,
与当前的Session实例关联并获得运行期的Criteria实例,
完成检索。

DetachedCriteria类实现子查询:
DetachedCriteria dc= DetachedCriteria.forClass(User.class);
dc.setProjection(Projections.avg("age"));
Criteria c=session.createCriteria(User.class);
c.add(Subqueries.propertyGt("age",dc));
List list=c.list();
当执行检索时Hibernate会生成类似如下的SQL语句:
Select * from user where age>
(select avg(age) from user group by age);

猜你喜欢

转载自quanwsx.iteye.com/blog/1044509