网上的一半的hibernate的翻页主要的思路是,第一次查出数据库一共有多少记录放在totalRow中,用事先给定的每页记录数pageSize 去除totalRow 得到页数,并且记录一些量值。当再次查询时取参数执行查询。改变页数在视图层自动完成,那就存在这样的一个问题,必须先执行一次gettotalRow的DAO操作,获取执行一次查询,list.size() 这样在数据库 就执行了select * from 把所有的数据查出来,紧紧为了知道又多少行,然后你又要再次去执行查询,获取你想要的特定行,只是不是太低效率了啊
还是如果是多重条件查询,你还要为不同的查询条件去写不同 getTotalRow接口,不同获取实际行的接口,实在太烦了吧?

解决方案 »

  1.   

    用Hibernate提供的分页查询效率应该不用太多怀疑吧。hibernate的分页查询
    query.setFirstResult(); 设置从第几条记录开始查起
    query.setMaxResults(); 设置查多少条记录
    根据query对象上面的两个方法,我们可以封装成一个分页查询的方法
    public List search(int pageNo,int pageSize)
    pageNo:指定查询第几页
    pageSize:指定每页查询多少条记录
    query.setFirstResult()这个方法的值就是页数减1再乘以查询数,这样就可以设置从第几条记录开始查起
    query.setMaxResults()这个方法就直接把查询数量传进去就可以了。
    示例如下:
    int startIndex=pageSize*(pageNo-1);
    query.setFirstResult(startIndex);
    query.setMaxResults(pageSize);
      

  2.   

    分页基本都是这样的吧
    即使你用JDBC
    因为首先你需要告诉客户有多少页,这就需要知道数据库中有多少条,于是会有 select count(*) from ....
    然后再查询出当前页的记录
      

  3.   


    我发现控制台输出的SQL语句是  select top (pageSize * currentPage) 那么你翻页到最后 那不是也不是把全部数据都查出来?
      

  4.   

    如果能让hibernate来调用存储过程,然后把分页用存储过程来写应该会好多了吧
      

  5.   

    gettotalRow的DAO操作不是select count(1) from table吗?
      

  6.   

    <img src="http://10.111.132.134:8080/struts2/tuzi.gif" />
      

  7.   

    JQuery翻页比Hibernate简单并且效率高。
    LZ可以尝试下。
    不要拘禁你的思想