38 | 分页的那些事儿
四火
该思维导图由 AI 生成,仅供参考
你好,我是四火。
分页是全栈开发中非常常见的一个功能,绝大多数网站都需要用到。这个功能可谓麻雀虽小五脏俱全,是从呈现层、控制器层、到模型层,并和数据存储密切相关的真正的“全栈”功能。有时候你能见到一些清晰、明确的分页,也就是说,你能看到某一个内容的呈现被分成若干页,而当前又是在第几页;而有时候这个功能则是部分模糊了的,比方说,能翻页,但是并不显示总共有多少页。那今天,就让我们来了解一些典型的分页方法,理解分页的一些常见问题和它们的解决方式。
物理分页和逻辑分页
物理分页一般指的就是数据库分页,而逻辑分页则是程序员口中的“内存分页”。前者是通过条件查询的方式,从数据库中取出特定的数据段来,而后者,则是在完整数据都加载在内存中的情况下,从中取出特定段的数据来。
显然我们一般情况下更关注物理分页,因为内存的大小总是更为有限,多数情况下我们希望通过条件查询的方式去数据库中取出特定页来。但是也有反例,比方说某些数据量不大,但是访问频率较高的数据,以“缓存”的形式预加载到内存中,再根据客户端的分页条件返回数据,这种方式一样可以遵循分页接口,但是由于被分页的数据是全部在内存中的,这样的数据一般需要遵循如下几个要求:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
全栈开发中常见的分页功能涉及物理分页和逻辑分页,以及两种分页代码设计方法。物理分页指数据库分页,逻辑分页是程序员口中的“内存分页”。文章介绍了分页设计中的两种实现方式:单独的分页工具类和绑定查询结果的分页对象。此外,还探讨了SQL实现中的细节和问题,如Oracle数据库中的行号问题。文章还讨论了分页中常见的问题——不同页之间的重复数据,并提出了可能的解决方案。总体而言,本文深入浅出地介绍了分页功能在全栈开发中的重要性和实现方式,对于开发人员具有一定的参考价值。文章内容涵盖了分页功能的设计、实现以及常见问题的分析,为读者提供了全面的技术视角。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全栈工程师修炼指南》,新⼈⾸单¥59
《全栈工程师修炼指南》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- bob请问通常接口返回的“是否有下一页”是如何实现的呢?
作者回复: 分页的时候,每一页都有一个返回数量的上限(pageSize),我们可以让这个pageSize设置为我们实际需要的数量+1,比如我们每页需要显示50条记录,每次返回最多51条。 这样的话,无论分页的查询是怎样实现的,如果该查询返回了51条记录,表示还有下一页;反之,如果小于51条记录,表示没有下一页了。
2019-12-281 - springday解决了困扰了我多年的问题。
作者回复: 😎
2019-12-071 - 靠人品去赢刚想说重复数据的问题,就提了。 我们遇到情况就是,订单列表无所谓不是第一页,每次到页面触发按钮的时候直接请求最新的数据,量不多可以忽略。 但是首页的展示或者用的比较频繁就不能,这样看起来很怪,之前虎嗅的网页版具有类似的问题,下拉新的一页和上面的数据有相同的。我们的想法是,拿到前一页的最后一个id,作为参数请求下一页放进去控制。貌似有的分页插件有类似的功能,暂时还没研究。
作者回复: "最后一个 id",就是文中我说的“数据队列”的方式。
2019-12-06 - 杜鑫请问老师,对于分页数据在redis中的缓存该怎么设计了,怎么保证mysql和redis数据一致性,谢谢老师~2020-12-251
- leslie数据库端做limit操作前端页面调用结果集这大概是最方面且最快捷的方式:调用的算法和数据结构同样简单;代价就是资源的消耗。无论是mysql还是sql server分页直接通过类似方式用的最多-时间代价相对小,擅长的东西做事擅长的事情。另外一种方式没尝试过。2019-12-061
- William Ning之前没有想过数据重复的问题,还需要阅读第二遍~2020-07-30
- 许童童老师这一节讲的第三种方法,数据队列正是我在业务中使用到的,很精妙,很好的解决了问题2019-12-06
收起评论