Hibernate学习笔记:用Query作分页

来源:互联网 发布:深圳网络出租屋转让 编辑:程序博客网 时间:2024/06/06 08:44

Query提供了两个方法以实现分页:
query.setFirstResult(int) 设置第一条记录开始的位置
query.setMaxResults(int) 设置返回的纪录总条数
在前面的BookDao的接口和实现类中添加一个方法:

这样看起来很简单, 我比较感兴趣的是Hibernate内部是怎么实现了。我手头有sybase, sqlserver2005, oracle8.1, 我分别作了实验看怎么写出一个可分页的sql.下面我就以从第11条记录开始取5条记录 来做例子。
oracle因为 返回的记录集里面默认有一个rownum行号,可以利用这个来分页:为什么要有子查询和给rownum 取别名,要仔细想一想:
select * from (select rownum as myid, book.* from book) where myid> 10 and myid<= 15
sqlserver因为可以select top 所以可以这么做:
select top 5 * from etl.letter where id not in (
 select top 10 id from etl.letter
)

但是这句话在同样支持select top的Sybase中不work,似乎子查询中不能用select top.但是这并不是问题,可以select前15条记录,然后在jdbc中忽略前10条, 这样也可以达到效果.
如果是MySql,可以有: SELECT * FROM my_table LIMIT 10, 5, 但是我手头没有这样的数据库.所以没有测试.
jdk 1.5中的Statement可以设置maxRows, statement.setMaxRows(int),这种方式很好与数据库无关.

 

原创粉丝点击