如何分页
分页的主要的两个底层算法,以及分页查询的底层思路如下所示,
了解了底层原理,封装不是难事,关键在原理不在代码!
公式拿走,自己即可封装工具类,轻松完成分页.
话不多说,开始
Start!
关键数据:
请求的当前页 pageNum
请求的显示条数 pageSize
返回的总页数 totalPage
返回的总条数 totalCount
返回的list数据 data
查询data的开始索引 startIndex
已知关键数据:
pageNum
pageSize
需要从数据库中查的有:
totalCount 可以直接查出
data 需要开始索引关键数据startIndex
需要计算出来的关键数据的有:
totalPage
startIndex
计算公式:
总页数计算公式:
int totalPage= (totalCount+pageSize-1)/pageSize;//备注: java int 会取整;
测试:
总条数 每页显示条数 总页数 验证
27 10 3 (27+10-1)/10=3
28 10 3 (28+10-1)/10=3
29 10 3 (29+10-1)/10=3
30 10 3 (30+10-1)/10=3
31 10 4 (31+10-1)/10=4
开始索引startIndex:
int startIndex=(pageNum-1)*totalPage;
测试:
设: 数据量为100条,根据总条数totalCount与每页显示条数pageSize可以由上公式算出totalPage一共10页;
请求页码 显示条数 开始索引 LIMIT DATA 验证
1 10 0 0,10 (0,1,2,3,4,5,6,7,8,9) (1-1)*10=0
2 10 10 10,10 (10,11,12,13,14,15,16,17,18,19) (2-1)*10=10
3 10 20 20,10 (20,21,22,23,24,25,26,27,28,29) (3-1)*10=20
4 10 30 30,10 (30,31,32,33,34,35,36,37,38,39) (4-1)*10=30
5 10 40 40,10 (40,41,42,43,44,45,46,47,48,49) (5-1)*10=40
代码中应用:
1 已知 请求参数 pageNum pageSize
int pageNum;
int pageSize;
2 查询总条数(这里忽略查询条件)
int totalCount = select count(*) from XXX;
3 计算总页数
int totalPage= (totalCount+pageSize-1)/pageSize;
4 计算开始索引
int startIndex=(pageNum-1)*totalPage;
5 查询data数据集
List data=select * from XXX LIMIT startIndex,pageSize;
以上关键数据均已得出!
一般情况下,把关键数据封装成json或bean进行返回:
{
"pageNum":pageNum,
"pageSize":pageSize,
"totalCount":totalCount,
"totalPage":totalPage,
"startIndex":startIndex,
"data":data
}
End!