为了账号安全,请及时绑定邮箱和手机立即绑定

关于分页查询的底层细节

标签:
Java MySQL
在之前的开发工作中,一直使用的pagehelper进行分页查询,简单传入pageNum, pageSize, 然后在写一条查询所有数据的sql就完成了,剩下的分页信息由pagehelper完成并封装好数据, 如下所示:
"pageNum": 1, 
"pageSize": 3, 
"size": 3, 
"orderBy": null, 
"startRow": 1, 
"endRow": 3, 
"total": 16, 
"pages": 6, 
"list": [  ], 
"firstPage": 1, 
"prePage": 0, 
"nextPage": 2, 
"lastPage": 6, 
"isFirstPage": true, 
"isLastPage": false, 
"hasPreviousPage": false, 
"hasNextPage": true, 
"navigatePages": 8, 
"navigatepageNums": [ 1, 2, 3, 4, 5, 6 ]

-----其中pagehelper封装了很多信息,对于提高我们开发效率有很大帮助,但是在某些场景下无法使用这些插件的话,我们又该如何实现分页呢? 不管是后端还是前端,我想都会有点不值所措
-----在我上一个的开发项目中就是后端python开发,只能提供当前页和总页数,我之前的前端分页插件就是依据pagehelper实现的,在后端无法满足相应分页信息的时候,只能在前端对分页插件进行改造–我的另一篇文章,使之只需要后端返回当前页和总页数,就满足了一个分页插件基本的功能,在这里分享一篇关于mysql如何实现分页查询的文章,对于我们理解分页会有很大的帮助

摘要:MySql数据库实现分页查询的SQL语句写法!https://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430

一:分页需求:
   客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,
   那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,
   所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:
比如:
   查询第1条到第10条的数据的sql是:select * from table limit 0,10;   
   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;
   查询第10条到第20条的数据的sql是:select * from table limit 10,20;  
   ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;
   查询第20条到第30条的数据的sql是:select * from table limit 20,30;  
   ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;

二:通过上面的分析,可以得出符合我们自己需求的分页sql格式是:select * from table limit (start-1)*limit,limit; 
   其中start是页码,limit是每页显示的条数
通过上面的文章我们可以发现,start就是pageNum, limit就是pageSize, 而我们真正开始查询的是(start-1)*limit, 查多少条就是limit,通过这查询后端就可以返回当前页面的数据和查询一条总条数进而算出总页数返回给前端,那么前端的处理就可以按照下面的方法

图片描述

// 判断是否只有1页
if(this.option.pages <= 1){
    return;
}
// 判断是否有上一页
if (this.option.pageNum > 1) {
    this.option.hasPreviousPage = true;
    this.option.previousPage    = this.option.pageNum - 1;
} else {
    this.option.hasPreviousPage = false;
    this.option.previousPage    = 1;
}
// 判读是否有下一页
if (this.option.pageNum < this.option.pages) {
    this.option.hasNextPage = true;
    this.option.nextPage    = this.option.pageNum + 1;
} else {
    this.option.hasNextPage = false;
    this.option.nextPage    = this.option.pages;
}
根据当前页和总页数就可以计算出上一页和下一页,然后就有了hasPreviousPage、previousPage、hasNextPage、nextPage、再加上已有的pageNum和pages组成五个必要的分页数据,相信剩下的就是简单的样式处理和功能丰富和实现了
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消