您的位置:首页 > 其它

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

2012-09-11 22:59 435 查看
记录数查询很简单:

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

原文: /article/3770525.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: