最近在使用Hibernate進行分頁查詢的時候,發現Hibernate分頁有一個瓶頸,就是隻能訪問查詢對應的記錄,並不能返回符合條件的總條數,網上給的很多策略都是再寫一個方法,通過HQL查詢總記錄數,個人感覺這種方式太複雜了,如果涉及到複雜查詢的時候,HQL也不好寫,既然Hibernate是個這麼流行的ORM框架,我相信它肯定提供了對應的方式,所以嘗試了下,發現如下方式更爲人性化。
1.通過設置Projections.rowCount()查詢總記錄數
// 查詢總條數
Long totalCount = (Long) detachedCriteria.setProjection(Projections.rowCount()).getExecutableCriteria(this.getHibernateTemplate().getSessionFactory().getCurrentSession()).uniqueResult();
2.取消查詢總條數的設置
// 取消查詢總條數 進行正常分頁查詢
detachedCriteria.setProjection(null);
3.正常分頁查詢
this.getHibernateTemplate().findByCriteria(detachedCriteria, startIndex, pageSize);
如果日誌設置打印SQL的話,可以發現查詢總條數的發送的SQL就是select count(*) from…,即有效率保障,使用起來還方便