在java中实现分页的最佳方法
我正在使用HibernateAPI的在java中实现分页的最佳方法,java,sql,hibernate,pagination,Java,Sql,Hibernate,Pagination,我正在使用HibernateAPI的query.setMaxResults(maxResults)和query.setFirstResult(firstResult)方法来实现分页MS SQLServer 2012 sp1是我在项目中使用的数据库 以下是示例查询: SELECT a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c
query.setMaxResults(maxResults)
和query.setFirstResult(firstResult)
方法来实现分页MS SQLServer 2012 sp1
是我在项目中使用的数据库
以下是示例查询:
SELECT a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1
当用户选择第30页时,执行以下查询:
SELECT top 200 a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1 - executed with 2502540 ms
SELECT top 6000 a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1 - executed with 34220186 ms
a.c1、b.c2、b.c3前6000名,从a.c1订单执行时间为34220186毫秒的人员中选择a.c1、b.c2、b.c3,地址为b.WITH(NOLOCK)
所以很明显,时间和页码成正比。有没有一种方法可以在不考虑页码的情况下保持恒定的执行速度?因为我们总是获取相同数量的记录
提前感谢。Hibernate
.setMaxResults()
和.setFirstResult()
是设置,将根据所选方言使用的DB引擎应用这些设置
在大多数情况下,这将实现预期的行为:在数据库服务器端进行分页。这确实是为客户机(应用程序)获取页面的最佳方式
在某些情况下,当旧的DB引擎不支持分页时,Hibernate将尝试至少做到最好。。。e、 g.如果只需要第5页的20行(我记得有一些Sybase版本或SQL Server 2000),则选择前100行
真正的SQL语句是由方言驱动的。例如,SQL Server 2008和SQL 2012上的分页可能不同
是的,这是使用Hibernate进行分页的正确方法