本人现在使用的方法如下,下面是一个持久层的DAO:public class TbtagDAO extends DefaultDAO { /**
 *分页时:每页显示记录条数
 */
public Integer numPP = 20; /**
 * 当执行查询操作后,count将记录按当前查询条件查询到的结果的总条数
 */
private Long count = 0L;
/**
 * 按页查询所有标签记录
 * @param page - 页码
 * @param numPP - 每页记录数
 * @return
 */
public List findAll(Integer page,Integer numPP) {
log.debug("finding all Tbtag instances");
try {
if(page<0){
page = 1;
}

String queryString = "from Tbtag";
Session session = getSession();

String sql = "select count(tag_id) from Tbtag";
Query query = session.createSQLQuery(sql);
BigInteger c = (BigInteger)query.uniqueResult();
this.count = c.longValue();

Query queryObject = session.createQuery(queryString);
queryObject.setFirstResult((page-1)*numPP);
queryObject.setMaxResults(numPP);

return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
}
在上面类中的private Long count = 0L;由于我要在JSP页面上输出分页和页码,就是[首页,第一页,第二页....第N页,尾页]这样的东西,所以需要预先知道一共有多少页,这就要在每次查询时要先查询记录总数,并根据每页记录数来计算总共有有多少页.存在问题:就是每次都要查询记录总数,貌似会做很多重复的查询.
求解:是否有办法解决或改进上面提出的问题.或者有其它更好的分页办法,不一定非使用hibernate

解决方案 »

  1.   

    分页大体来说有两种思路:第一就是全部加载数据,然后在页面上给做分页动作。
    第二就是写分页语句,每次去数据库取就只取目标范围内的数据。hibernate应该用的第一种方法。
      

  2.   

    回复调试中~~~===================================================================================
    ==-=-=-=-==-=-=-=-=-=- System.out.println("Hello World!"); -=-=-==-=-=-=-=-=-=-=-==
    ===================================================================================
      

  3.   

    回复调试中~~~===================================================================================
    ==-=-=-=-==-=-=-=-=-=- System.out.println("Hello World!"); -=-=-==-=-=-=-=-=-=-=-==
    ===================================================================================