您的位置:

Mybatis Plus分页失效问题及解决方案

一、分页失效的原因

Mybatis Plus是一款优秀的ORM框架,使用简单方便。但是,在使用它进行分页时,有时会出现分页失效的问题,原因可能有以下几个方面:

1、Mybatis Plus版本问题。如果使用的是较旧的版本,可能存在分页失效的问题。解决办法是升级到最新版本。

2、Mapper.xml文件中SQL语句格式问题。在Mapper.xml中书写SQL语句时,如果格式不正确,可能会导致分页失效。正确的格式是在最后加上limit #{offset}, #{pageSize},其中#{offset}表示偏移量,#{pageSize}表示每页显示的数量。

3、Mybatis Plus默认分页插件问题。默认情况下,Mybatis Plus自带了一个分页插件com.baomidou.mybatisplus.plugins.PaginationInterceptor。但是,有时候在进行复杂查询时,这个分页插件可能会失效,导致分页查询不到数据。

4、分页参数传参问题。如果使用的是分页查询方法,那么在调用方法时必须传入Page对象,而且必须在此前调用setRecordsTotal方法设置总记录数。如果不设置总记录数,则分页插件无法工作,导致分页查询不到数据。

二、解决方案

针对上述几个原因,我们可以有不同的解决方案:

1、升级Mybatis Plus版本

如果使用的是较旧版本的Mybatis Plus,可以尝试升级到最新版本。最新版本已经解决了一些已知的分页失效问题,可以提高分页查询的成功率。

// Maven中使用最新版本的Mybatis Plus

   
   com.baomidou
   
   
   mybatis-plus-boot-starter
   
   
   3.4.2
   

  

2、Mybatis Plus分页插件配置

修改Mapper.xml文件,格式按照以下方式书写:

<select id="selectPage" resultMap="BaseResultMap">
    select * from tb_demo
    <where>
        1 = 1
    </where>
    limit #{offset}, #{pageSize}
</select>

配置Mybatis Plus分页插件,可以在application.yml文件中加入如下配置:

mybatis-plus:
  configuration:
    # 分页插件,一般不需要修改
    page-params: pageNum=1;pageSize=10;count=countSql

3、自定义分页插件

Mybatis Plus提供了自定义分页插件的功能,可以根据业务进行自定义。自定义分页插件需要继承com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor类,然后实现intercept方法,在该方法中处理分页逻辑。例如,自定义分页插件可以根据前端传入的分页参数进行分页,而不是使用默认的分页参数。自定义分页插件代码示例如下:

public class CustomPaginationInterceptor extends PaginationInterceptor {

    @Override
    public Page SqlParserInterceptor(MappedStatement ms, Page page) {
        // 获取前端传入的分页参数
        Integer pageNum = (Integer) page.get("pageNum");
        Integer pageSize = (Integer) page.get("pageSize");
        // 处理分页逻辑
        int offset = (pageNum - 1) * pageSize;
        return super.SqlParserInterceptor(ms, new Page(offset, pageSize));
    }
}

4、正确传参

如果在调用分页查询方法时不传入Page对象或者没有调用setRecordsTotal方法设置总记录数,则分页查询不到数据。可以采用以下方式正确传参:

// 分页查询方法
IPage<Demo> pageDemo = new Page<>(pageNum, pageSize);
// 设置总记录数
pageDemo.setRecordsTotal(demoMapper.selectCount(null));
// 查询
IPage<Demo> pageResult = demoMapper.selectPage(pageDemo, null);

三、总结

Mybatis Plus是一款非常好用的ORM框架,但是在使用分页功能时可能会遇到分页失效的问题。针对该问题,我们可以从Mybatis Plus版本、Mapper.xml文件格式、分页插件、分页参数传参等方面入手,采取不同的解决方案。在进行分页查询时,建议使用最新版本的Mybatis Plus,并根据业务情况选择合适的分页插件。