老声常谈,分页查询的实现就是不分页
其实无论是TOP还是setMaxResults,都不是用于分页查询的,他们的目的在于通过限制抓取数量来提高查询性能,Rownum也是如此,这就是为什么Rownum在OrderBy之后就乱的原因(Oracle完全有能力让它OrderBy之后仍然有序)。那么我们怎么还要分页查询呢?无非是两个原因,其一是提高性能,其二是方便用户使用――没有哪个用户会关心1000行之外的数据。
这样就简单了,我们不必费心如何高效而优雅的从数据库中抓取某一页数据,而是在查询出所有数据(在maxResults限制下)之后,在内存中分页。例如,List getUsers()获取前1000个用户――对于企业应用,这已经很多了――在返回的List中作分页,即高效又简单,而且如果加入缓存机制之后,就不必每次翻页都重新查询了。
下面是示意类图:
cats_tigeresV5bl0fFs.JPG