Hibernate的三种查询方式

9 篇文章 0 订阅

Hibernate的三种查询方式

1.HQL (Hibernate Query Lanuage) 语句,这是类似SQL语句的一种对象化查询语句.

2.使用Criteria对象,进行按条件查询(Query by Criteria,简称QBC)和按示例查询(Query by Example 简称QBE).

3.生成原生的sql(Native SQL)语句.

Criteria的基本使用

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class);  
  3. List<Testbook> list=criteria.list();  
  4. tx.commit();  

 

 查询Testbook 中所有的数据,然后返回

Criteria 接口的核心方法

 

add()      增加一个代表查询条件的Criterion对象
addOrder()    增加一个代表排序的Criterion对象
createAlias()    创建关联查询,为所关联的持久化类建立别名
createCriteria()   在相互关联的持久化类之间建立条件约束
setFirstResult()   设定要获取的第一条记录的位置
setMaxResults()    设定要获取的记录的最大数量
list()     获取满足查询条件的记录的集合
uniqueResult()    获取满足查询条件的唯一记录

 

对查询结果进行排序

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class).add(  
  3. Restrictions.like("name","任%")).add(Restrictions.between("id",1000,1010));  
  4. criteria.addOrder(Order.desc("id")).addOrder(Order.asc("createdTime"));  
  5. List<Testbook> list=criteria.list();  
  6. tx.commit();  

 

实现分页显示数据

Java代码   收藏代码
  1. <span style="font-size: x-small;">Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class).add(  
  3. Restrictions.like("name","任%"));  
  4. criteria.addOrder(Order.desc("id"));  
  5. criteria.setMaxResults(30);  
  6. criteria.setFirstResult(10);//setFirstResult()从0开始计数  
  7. List<Testbook> list=criteria.list();  
  8. tx.commit();</span>  

 

 

只查询一条记录

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class).add(  
  3. Restrictions.like("name","任%"));  
  4. criteria.addOrder(Order.desc("id"));  
  5. criteria.setMaxResults(1);  
  6. Testbook tb=(Testbook)criteria.uniqueResult();  
  7. tx.commit();  

 

Restrictions类

<----------------------------------------------------------------------------------------------------------->

 

 


条件"或"方式组合查询条件

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. Criterion criterion1=Restrictions.or(Restrictions.like("name","任%"),  
  4. Restrictions.between("id",1000,1010));  
  5. criteria.add(criterion1);  
  6. List<Testbook> list=criteria.list();  
  7. tx.commit();  

 

 

 

使用原生SQL语句设定查询条件

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.add(Restrictions.sqlRestriction("{alias}.name=?","Narcissus",Hibernate.STRING));  
  4. List<Testbook> list=criteria.list();  
  5. tx.commit()  

 

 统计函数查询

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Projections.max("price"));  
  4. Double maxValue=(Double)criteria.uniqueResult();  
  5. tx.commit();  
  6. System.out.println(maxValue);  

 

统计函数组合查询条件

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Projections.max("price"));  
  4. Double maxValue=(Double)criteria.uniqueResult();  
  5. tx.commit();  
  6. System.out.println(maxValue);  

 

 

获取多个统计函数的值

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. ProjectionList proList=Projections.projectionList();  
  4. proList.add(Projections.max("price"));  
  5. proList.add(Projections.min("price"));  
  6. proList.add(Projections.avg("price"));  
  7. proList.add(Projections.sum("price"));  
  8. proList.add(Projections.count("price"));  
  9. proList.add(Projections.countDistinct("price"));  
  10. proList.add(Projections.rowCount());  
  11. criteria.setProjection(proList);  
  12. Object values[]=(Object[])criteria.uniqueResult();  
  13. tx.commit();  

 

 

 

 分组查询

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Projections.groupProperty("price"));  
  4. List<Double> list=criteria.list();  
  5. tx.commit();  

 

 分组统计

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. ProjectionList proList=Projections.projectionList();  
  4. proList.add(Projections.rowCount());//商品的个数  
  5. proList.add(Projections.sum("price"));  
  6. proList.add(Projections.groupProperty("name"));  
  7. criteria.setProjection(proList);  
  8. List<Double> list=criteria.list();  
  9. tx.commit();  

 

 

 

投影查询
在一个表中有很多个字段,投影查询只是查询某一个或多个字段,也称局部查询

 

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Property.forName("price"));  
  4. criteria.add(Restrictions.gt("price",new Double(40.0)))  
  5. List<Double> list=criteria.list();  
  6. tx.commit();  

 

使用Property类的forName()方法实现分组统计

 

Java代码   收藏代码
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. ProjectionList proList=Projections.projectionList();  
  4. proList.add(Projections.forName("price").max());  
  5. proList.add(Projections.forName("price").min());  
  6. proList.add(Projections.forName("price").avg());  
  7. proList.add(Projections.forName("category.id").group().as("c"));  
  8. criteria.setProjection(proList);  
  9. criteria.addOrder(Order.desc("c"));  
  10. List<Object[]> list=criteria.list();  
  11. tx.commit();  

 

使用DetachedCriteria对象实现离线查询

Java代码   收藏代码
  1. //在表现层,构造DetachedCriteria对象,保存用户动态的查询条件  
  2. DetachedCriteria detchedCriteria=DetachedCriteria.forClass(Testbook.class);  
  3. detchedCriteria.add(Restrictions.like("name","任%")).add(Restrictions.between("id",new Integer(1),new Integer(10)));  
  4. detchedCriteria.addOrder(Order.desc("id"));  
  5.   
  6. //在业务逻辑层,DetachedCriteria对象与当前的Session对象进行绑定,获取查询结果  
  7. Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();  
  8. Transaction tx=detchedCriteria.getExecutableCriteria(session);  
  9. List<Testbook> list=criteria.list();  
  10. tx.commit();  

 

根据示例对象进行查询

 

 

先定义一个模板然后把这个模板的样式传进去,查询,例如这里定义的Testbook中的名字为Narcissus的字段,进行查询,条件可以为一个也可以为多个,对应的就是where中的条件

 

Java代码   收藏代码
  1. Testbook tb=new Testbook();  
  2. tb.setName("Narcissus");  
  3. Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();  
  4. Transaction tx = session.beginTransaction();  
  5. Criteria criteria=session.createCriteria(Testbook.class);  
  6. Criteria.add(Example.creaate(tb));  
  7. List<Testbook> list=criteria.list();  
  8. tx.commit();  

 

转载自:http://fehly.iteye.com/blog/642110

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值