浏览 2161 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-11
前面发了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
当然还有求平均,你可以自己尝试! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |