在我们的实际项目开发当中,查询统计的功能是必不可少的,按传统的写SQL语言的方式去做查询统计在这方面显得非常麻烦,特别是查询条件多、连接的表多时,搞得自己昏头转向,最后可能还没成功,但我们如果用Hibernate里的Projections就会显得特别容易,而且层次感,条理性非常清析!
例如:有一产品表Product(pid,pname,typeid,num)与产品类型表Type(typeid,typename)。
影射的类为:Product.java(pid,pname,typeid,num)、Type.java(typeid,typename)
如果要统计出产品的数与产品的数量总和:
Criteria cri = session.createCriteria(Product.class)
List list = cri.setProjection(Projections.projectionList().add(Projections.rowCount()).add(Projections.sum("num"))).list();
for(int i=0;i<list.size();i++){
Object obj[] = (Object[])list.get(i);
for(Object o:obj){
System.out.println(o);
}
}
如果要统计每一类产品的总数:
Criteria cri = session.createCriteria(Product.class);
cri.createAlias("type", "type");
List list = cri.setProjection(Projections.projectionList().add(Projections.rowCount()).add(Projections.sum("num")).add(Projections.groupProperty("type.typeid"))).list();
for(int i=0;i<list.size();i++){
Object obj[] = (Object[])list.get(i);
for(Object o:obj){
System.out.print(o + ":");
}
System.out.println();
}