Hibernate的查詢 標準(Criteria)查詢 聚合和分組 – JAVA編程語言程序開發技術文章

前面發瞭Hibernate的查詢 標準(Criteria)查詢 分頁、單個記錄、排序 後有網友回復說道查詢數據總數量,我今天補充一下標準查詢中的 聚合與分組
 
記錄數查詢很簡單:
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 
 
當然還有求平均,你可以自己嘗試!
作者:dyllove98

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *