Hibernate的查询 标准(Criteria)查询 聚合和分组

前面发了Hibernate的查询 标准(Criteria)查询 分页、单个记录、排序 后有网友回复说道查询数据总数量,我今天补充一下标准查询中的 聚合与分组

 

记录数查询很简单:

Java代码    收藏代码
  1. Criteria crit = session.createCriteria(User.class);  
  2. crit.setProjection(Projections.rowCount());  
  3. int v = (Integer)crit.uniqueResult();  

 

但是要注意,setProjection方法只是最后一次有效。就是说你可以多次使用这个方法,但是后一次操作将覆盖前一次的聚合操作。

Java代码    收藏代码
  1. Criteria crit = session.createCriteria(User.class);  
  2. crit.setProjection(Projections.rowCount());  
  3. int value = (Integer)crit.uniqueResult();  
  4. System.out.println(value);  
  5. crit.setProjection(Projections.max("id"));  
  6. value = (Integer)crit.uniqueResult();  
  7. System.out.println(value);    
  8. crit.setProjection(Projections.sum("id"));  
  9. value = (Integer)crit.uniqueResult();  
  10. System.out.println(value);    

 

以上就会执行三次查询操作,分别执行的SQL为:

Sql代码    收藏代码
  1. select count(*) from user  
  2. select max(id) from user  
  3. select sum(id) from user  

 

 

如果要设置多个聚合操作,请查看如下示例:

Java代码    收藏代码
  1. ProjectionList proList = Projections.projectionList();  
  2. proList.add(Projections.rowCount());  
  3. proList.add(Projections.max("id"));  
  4. proList.add(Projections.sum("id"));  
  5. crit.setProjection(proList);  
  6. List results = crit.list();  
  7. Object[] arr = (Object[])results.get(0);  
  8. for(Object ob : arr){  
  9.     System.out.println(ob.toString());    
  10. }  

 

上面执行一条SQL:

Sql代码    收藏代码
  1. select count(*),max(id),sum(id) from user  

 

如果你看Projections这个类的话也也有看到分组的方法:

Java代码    收藏代码
  1. Criteria crit = session.createCriteria(User.class);  
  2. crit.setProjection(Projections.rowCount());  
  3. crit.setProjection(Projections.groupProperty("name"));  
  4. List results = crit.list();  
  5. Object[] arr = null;  
  6. for(int i=0;i<results.size();i++){  
  7.     arr = (Object[])results.get(i);  
  8.     for(Object ob : arr){  
  9.         System.out.print(ob.toString());  
  10.     }  
  11.     System.out.println();  
  12. }  

 

以上会执行SQL:

Sql代码    收藏代码
  1. select count(*) from user group by name  

 

当然还有求平均,你可以自己尝试!


更多信息请查看 java教程网  www.itchm.com

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值