最近在使用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…,即有效率保障,使用起来还方便