物理分页指的是数据库分页,直接通过 SQL 语句查询指定数据集返回用户。更常见的还是物理分页。
逻辑分页指的是内存分页,将数据全部存在内存中,再截取分页所需数据集返回用户。
逻辑分页的前提要求
- 数据量不大,可以放在内存中。
- 一致性满足要求,或者使用专门的设计维护内存中的数据一致性。
- 持久性方面,数据允许丢失
分页代码设计
- 单独的分页工具类:彻底把 DAO 的查询逻辑分离出去,创建一个单独的分页工具类 Paginator。
- 绑定查询结果的分页对象:将分页对象和查询数据的结果集绑定在一起,数据访问层直接返回这个携带了实际数据的分页对象。
- 把 Page 对象和 DAO 的代码整合起来,放到同一个有状态的业务对象上去,这样这个对象及携带了业务数据,有携带了分页信息。
SQL 实现
select * from TABLE_NAME limit 3, 4;
重复数据的问题
分页查询中出现重复数据的原因:
- 排序不稳定,可能会出现排序索引值相等的情况。导致排序算法每次排序的结果不一致。可以通过和主键值一起排序的方式来避免。
- 数据本身变化,由于数据的变化导致分页查询出现数据重复。这种情况某些场景下是合理的。如果需要保证不重复可以通过维护排序版本、使用数据队列等方式来保证。
网友评论