首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-10-29 
Hibernate的查询 标准(Criteria)查询 聚合和分组前面发了Hibernate的查询 标准(Criteria)查询 分页、单个记

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

前面发了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

?

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

1 楼 gs053485 2012-05-14   不错,很是详细的资料 2 楼 cuisuqiang 2012-05-14   gs053485 写道不错,很是详细的资料
博客里还有其他的,你可以看看

热点排行