记录数查询很简单:
- 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