当前使用版本 mybatis-plus-extension:3.5.6

当前环境信息 例如: Java17 + Mysql5.7

描述bug现象 分页插件中处理 LIMIT 语句时,当传递的 Page 对象中的 size 为-1 且没有配置 maxLimit 时,由于判断逻辑错误,没有跳过 LIMIT 拼接,反而最终会拼接为 LIMIT -1;

流程分析:当没有提前结束 LIMIT 的拼接,继续执行后面逻辑,当 size 为 -1 时 offset 函数的计算逻辑会使得每次都返回 0。那么最终数据为:offset -> 0,size -> -1,最终就拼接为了 LIMIT -1,最后执行 SQL 语句数据库报错。 default long offset() { long current = getCurrent(); if (current <= 1L) { return 0L; } return Math.max((current - 1) * getSize(), 0L); }

提供问题复现步骤 MyBatis-Plus 分页插件在处理 pageSize 为 -1 不拼接 limit 时的判断 bug

** 修复建议 ** 由于对 _limit 进行了判断初始化,永远不为 null,建议判断更为:page.getSize() < 0 && _limit < 0

Comment From: miemieYaho

page.maxLimit插件.maxLimitpage.size分别为什么值会出现你说的情况?

Comment From: congqingquan

page.maxLimit插件.maxLimitpage.size分别为什么值会出现你说的情况?

page.maxLimit == null page.size == -1 插件.maxLimit == -1

Comment From: congqingquan

page.maxLimit插件.maxLimitpage.size分别为什么值会出现你说的情况?

Comment From: congqingquan

page.maxLimit插件.maxLimitpage.size分别为什么值会出现你说的情况?

抱歉,并不是一个问题,将 maxLimit 配置为 null 就好了。老版本配置的 -1。