前言
在日常项目中我们经常遇到分页的场景,作为一个经验丰富的coder应该知道怎么选择合适的方案,本文中笔者列列举两种常见的分页方案,并阐述各自利弊,供大家参考
需求场景
某某页面需要展示数据列表,要求分页,每页5条数据,按照id倒序排列
实现方案
方案一:pageIndex、pageSize结合数据库limit进行分页
说明:
pageIndex:页码(改变页码值即可查询对应页码数据)
pageSize:每页条数
sql:
select * from db order by id desc limit ( ${pageIndex} - 1 ) * ${pageSize} , ( ${pageIndex} * ${pageSize} )
优缺点:
常用于管理后台(toB)的分页场景,可以实现向前先后翻页,也可以跳页,缺点是在翻页过程中如果出现数据的增加或删除,可能会造成列表数据的重复或遗失
方案二:lastId、pageSize结合数据库limit进行分页
说明:
lastId:上一页最后一条数据对应的id(第一页传空,不进行id条件对比)
pageSize:页码
sql:
-- 第1页
select * from db order by id desc limit pageSize
-- 第N页
select * from db where id < ${lastId} order by id desc limit pageSize
优缺点:
常用于app(toC)的feed流场景,只能实现向后翻页和下拉刷新,但在数据增加或删除时没有方案一数据重复或遗失的问题
总结
白猫黑猫,能抓住老鼠就是好猫
方案没有绝对的好与坏,我们需要了解的是每个方案有哪些优和不足,适合哪种场景,因地制宜的选用合适的方案才能事半功倍解决问题