如何分页加载

第一种方式:
参数:

pageNo pageSize

返回结果:

List<T>

判断是否有下一页的方式:

判断返回的集合的大小是否小于pageSize,小于pageSize就是没有下一页 (缺点是如果最后一页刚好是pageSize条数据,这时候虽然已经没有下一页了,但还是会产生一次请求,如果是界面上有显示加载过程不推荐使用该方法)

第二种方式:
参数:

pageNo pageSize

返回结果:

PageBean

判断是否有下一页的方式:

和totalPage比,比totalPage小就会有下一页

后台分页加载:

核心是sql语句的分页加载 http://www.cnblogs.com/bbgasj/archive/2012/11/06/2756567.html
例如:select * from order limit 10,20

如果在分页的过程中数据发生变化怎么办?

(这个只适合数据有排序的情况)
传上一页最后一个数据的id,查询id所在的行数,然后和它原来的行数比较,计算相差的行数, 然后 statrpos 和 limit 加上相差的行数

原始 第一种情况数据下移动 第二种情况数据上移

1   1   2
1   1   2
1   1   2
1   1   2
1   1   2
-   -   -
2   1   3
2   2   3
2   2   3
2   2   3
2   2   3

但是如果上一页最后的一个id被删除了,上面的就不成立了

还是这样靠谱

select * from order where id > [id] limit pageSize;

:::

瀑布流向下拉取加载更多导致的数据重复问题
这里还提到了客户端去重,这算是规避问题


---2017年2月9日 14:44:10 更新
为什么超长列表数据的翻页技术实现复杂
https://timyang.net/data/key-list-pagination/
为什么超长列表数据的翻页技术实现复杂2
https://timyang.net/data/key-list-pagination-ii/

发表评论

电子邮件地址不会被公开。