MyBatisPlus 暂时分页失效原因以及解决方法

背景介绍

在更新完MybatisPlus版本后暂时分页功能失效。

记得原来版本是可以成功的,可以在传参时候将pageSize设置<0可以成功的暂时不分页,结果升级完MybatisPlus版本后失效了,将pageSize<0的值拼接到了limit条件中,直接导致报错。在一步一步的排查中发现是源码中作了调整,-_-||

具体原因如下:

配置

分页插件正确的配置应该如下

java 复制代码
    public PaginationInnerInterceptor paginationInnerInterceptor()
    {
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        // 设置数据库类型为mysql
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // 在mybatis-plus-boot-starter 3.4.3.1及以后需要注释掉才能在设置pageSize<0时候成功暂时不分页
        // paginationInnerInterceptor.setMaxLimit(-1L);
        return paginationInnerInterceptor;
    }

源码分析

3.4.3以及以前的版本

在 PaginationInnerInterceptor 中的 beforeQuery 方法

java 复制代码
    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).sql(buildSql);
                }

            } else {
               ......
            }
        
    }

3.4.3.1及以后版本

在 PaginationInnerInterceptor 中的 beforeQuery 方法

java 复制代码
    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler 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才能暂时不分页成功!!!

相关推荐
2501_941982053 小时前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
此生只爱蛋3 小时前
【Redis】主从复制
数据库·redis
马猴烧酒.4 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
天天爱吃肉82184 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
大巨头4 小时前
sql2008 数据库分页语句
数据库
sino爱学习4 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
m0_715575344 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
老邓计算机毕设5 小时前
SSM智慧社区家政服务系统80q7o(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架
风生u5 小时前
activiti7 详解
java
岁岁种桃花儿5 小时前
SpringCloud从入门到上天:Nacos做微服务注册中心(二)
java·spring cloud·微服务