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

前面发了Hibernate的查询 标准(Criteria)查询 分页、单个记录、排序 后有网友回复说道查询数据总数量,我今天补充一下标准查询中的 聚合与分组
 
记录数查询很简单:
Java 代码 
Criteria crit = session.createCriteria(User.class); 
crit.setProjection(Projections.rowCount()); 
int v = (Integer)crit.uniqueResult(); 
 
但是要注意,setProjection方法只是最后一次有效。就是说你可以多次使用这个方法,但是后一次操作将覆盖前一次的聚合操作。
Java代码 
Criteria crit = session.createCriteria(User.class); 
crit.setProjection(Projections.rowCount()); 
int value = (Integer)crit.uniqueResult(); 
System.out.println(value); 
crit.setProjection(Projections.max("id")); 
value = (Integer)crit.uniqueResult(); 
System.out.println(value);   
crit.setProjection(Projections.sum("id")); 
value = (Integer)crit.uniqueResult(); 
System.out.println(value);   
 
以上就会执行三次查询操作,分别执行的SQL为:
Sql代码 
select count(*) from user 
select max(id) from user 
select sum(id) from user 
 
 
如果要设置多个聚合操作,请查看如下示例:
Java代码 
ProjectionList proList = Projections.projectionList(); 
proList.add(Projections.rowCount()); 
proList.add(Projections.max("id")); 
proList.add(Projections.sum("id")); 
crit.setProjection(proList); 
List results = crit.list(); 
Object[] arr = (Object[])results.get(0); 
for(Object ob : arr){ 
    System.out.println(ob.toString());   

 
上面执行一条SQL:
Sql代码 
select count(*),max(id),sum(id) from user 
 
如果你看Projections这个类的话也也有看到分组的方法:
Java代码 
Criteria crit = session.createCriteria(User.class); 
crit.setProjection(Projections.rowCount()); 
crit.setProjection(Projections.groupProperty("name")); 
List results = crit.list(); 
Object[] arr = null; 
for(int i=0;i<results.size();i++){ 
    arr = (Object[])results.get(i); 
    for(Object ob : arr){ 
        System.out.print(ob.toString()); 
    } 
    System.out.println(); 

 
以上会执行SQL:
Sql代码 
select count(*) from user group by name 
 
当然还有求平均,你可以自己尝试!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT布道者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值