myabtis中MyBatis 是如何进行分页的?分页插件的原理是什么

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

MyBatis 分页

MyBatis 中进行分页主要有两种常用的方法:手动编写分页语句和使用分页插件。

手动编写分页语句

在 MyBatis 中进行分页的一个基本方法是在 SQL 查询语句中直接使用 LIMITOFFSET 关键字。在编写 Mapper XML 时,可以这样手动添加分页语句:

<select id="selectPagedUsers" resultType="User">
  SELECT * FROM users
  LIMIT #{pageSize} OFFSET #{offset}
</select>

在这里,#{pageSize}#{offset} 是通过参数传递进来的,分别代表每页的大小和偏移量。

分页插件

虽然手动编写分页是一种方法,但为了提高开发效率和可维护性,分页插件 是一个更常见且更便捷的选择。其中最著名的分页插件是 PageHelper。

PageHelper 分页插件原理

PageHelper 是基于 MyBatis 的一个拦截器,它通过拦截 Statement,从而实现物理分页查询。

原理大致步骤如下:

  1. 设置分页参数:在执行查询前,使用 PageHelper 提供的静态方法 startPage(int pageNum, int pageSize) 设置分页参数。

  2. MyBatis 查询检测:当执行查询操作时,MyBatis 框架会拦截执行的 SQL。

  3. SQL 改写:PageHelper 分页插件会对原始 SQL 进行改写,插入分页查询的相关代码,比如添加 LIMITOFFSET

  4. 执行改写后的 SQL:MyBatis 执行被改写后的 SQL,返回分页数据。

  5. 返回分页结果:返回的结果会被 PageHelper 封装到 PageInfo 对象中,这个对象包含了分页信息如总记录数、总页数等。

PageHelper 使用示例

public PageInfo<User> queryByPage(int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<User> users = userMapper.selectAllUsers();
    return new PageInfo<>(users);
}

注意:使用分页插件的时候不需要在 XML 中编写任何分页代码,插件会自动处理分页逻辑。

在使用分页插件时,开发人员应当了解其配置和限制,确保其不仅能节省编码时间,同时也能够提高执行效率和准确性。

最后更新于