一、分页失效的原因
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 Pluscom.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,并根据业务情况选择合适的分页插件。