转摘---Hibernate Criteria查询

本文深入探讨了使用Hibernate Session、Criteria API进行数据库查询的方法,包括基础查询、精确查询、模糊查询、条件查询、分页、排序、分组、统计函数及子查询等高级特性。同时介绍了如何在SQL语句中实现多条件分组与统计功能,并通过DetachedCriteria类实现更灵活的子查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

 

 

转自-- http://blog.sina.com.cn/s/blog_4c3c4ba80100exrp.html 何冷愁的BLOG

以作以后开发所用,仅作记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值