MyBatisPlus 暂时分页失效原因及问题解决
目录
- 背景介绍
- 配置
- 源码分析
背景介绍
在更新完MyBATisPlus版本后暂时分页功能失效。
记得原来版本是可以成功的,可以在传参时候将pageSize设置<0可以成功的暂时不分页,结果升级完MybatisPlus版本后失效了,将pageSize<0的值拼接到了limit条件中,直接导致报错。在一步一步的排查中发现是源码中作了调整,-_-||
具体原因如下:
配置
分页插件正确的配置应该如下
public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); // 设置数据库类型为mysql paginationInnerInterceptor.setDbType(DbType.MYSQL); // 设置最大单页限制数量,默认 500 条,-1 不受限制 // 在mybatis-plus-boot-starter 3.4.3.1及以后需要注释掉才能在设置pageSize<0时候成功暂时不分页 // pagipythonnationInnerInterceptor.setMaxLimit(-1L); return paginationInnerInterceptor; }
源码分析
3.4.3以及以前的版本
在 PaginationInnerInterceptor 中的 beforeQuery 方法
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { ...... // 此处只有判断pageSize的值,只要小于0就可以暂时不分页 if (page.getSize() < 0L) { if (addOrdered) { PluginUtils.mpBoundSql(boundSql).sqljs(buildSql); } } else { ...... } }
3.4.3.1及以后版本
在 PaginationInnerInterceptor 中的 beforeQuery 方法
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, RejavascriptsultHandler resultHandler, BoundSql boundSql) { ...... // size 小于 0 且不限制返回值则不构造分页sql Long _limit = page.maxLimit() != null ? page.maxLimit() : maxLimit; if (page.getSize() < 0 && null == _limit) { if (addOrdered) { PluginUtils.mpBoundSql(boundSql).sql(buildSql); } return; }编程 ...... }
可以看出在3.4.3.1及以后判断条件多了一个限制,就是不能设置单页最大限制(maxLimit)属性值, 只有该值为null的前提下设置pageSize<0才能暂时不分页成功!!!
到此这篇关于MyBatisPlus 暂时分页失效原因及问题解决的文章就介绍到这了,更多相关MyBatisPlus 暂时分页失效内容请搜索编程客栈(www.devze.com)以前的文章或继续js浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论