前面发了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 user
- select max(id) from user
- select 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
当然还有求平均,你可以自己尝试!
更多信息请查看 java教程网 www.itchm.com