Hibernate的查询 标准(Criteria)查询 聚合和分组
编程技术  /  houtizong 发布于 3年前   185
前面发了Hibernate的查询 标准(Criteria)查询 分页、单个记录、排序 后有网友回复说道查询数据总数量,我今天补充一下标准查询中的 聚合与分组
记录数查询很简单:
Criteria crit = session.createCriteria(User.class);crit.setProjection(Projections.rowCount());int v = (Integer)crit.uniqueResult();
但是要注意,setProjection方法只是最后一次有效。就是说你可以多次使用这个方法,但是后一次操作将覆盖前一次的聚合操作。
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为:
select count(*) from userselect max(id) from userselect sum(id) from user
如果要设置多个聚合操作,请查看如下示例:
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:
select count(*),max(id),sum(id) from user
如果你看Projections这个类的话也也有看到分组的方法:
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:
select count(*) from user group by name
当然还有求平均,你可以自己尝试!
请您到ITEYE看我的原创:http://cuisuqiang.iteye.com
或支持我的个人博客,地址:http://www.javacui.com
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接