myabtis 中 MyBatis 是如何进行分页的?分页插件的原理是什么
myabtis 中 MyBatis 是如何进行分页的?分页插件的原理是什么
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
MyBatis 分页
MyBatis 中进行分页主要有两种常用的方法:手动编写分页语句和使用分页插件。
手动编写分页语句
在 MyBatis 中进行分页的一个基本方法是在 SQL 查询语句中直接使用 LIMIT
和 OFFSET
关键字。在编写 Mapper XML 时,可以这样手动添加分页语句:
1 | <select id="selectPagedUsers" resultType="User"> |
在这里,#{pageSize}
和 #{offset}
是通过参数传递进来的,分别代表每页的大小和偏移量。
分页插件
虽然手动编写分页是一种方法,但为了提高开发效率和可维护性,分页插件 是一个更常见且更便捷的选择。其中最著名的分页插件是 PageHelper。
PageHelper 分页插件原理
PageHelper 是基于 MyBatis 的一个拦截器,它通过拦截 Statement
,从而实现物理分页查询。
原理大致步骤如下:
- 设置分页参数:在执行查询前,使用 PageHelper 提供的静态方法
startPage(int pageNum, int pageSize)
设置分页参数。 - MyBatis 查询检测:当执行查询操作时,MyBatis 框架会拦截执行的 SQL。
- SQL 改写:PageHelper 分页插件会对原始 SQL 进行改写,插入分页查询的相关代码,比如添加
LIMIT
、OFFSET
。 - 执行改写后的 SQL:MyBatis 执行被改写后的 SQL,返回分页数据。
- 返回分页结果:返回的结果会被 PageHelper 封装到
PageInfo
对象中,这个对象包含了分页信息如总记录数、总页数等。
PageHelper 使用示例
1 | public PageInfo<User> queryByPage(int pageNum, int pageSize) { |
注意:使用分页插件的时候不需要在 XML 中编写任何分页代码,插件会自动处理分页逻辑。
在使用分页插件时,开发人员应当了解其配置和限制,确保其不仅能节省编码时间,同时也能够提高执行效率和准确性。