欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > MyBatis分页插件混用问题解析:IPage与PageHelper的冲突与解决

MyBatis分页插件混用问题解析:IPage与PageHelper的冲突与解决

2025/6/21 15:15:57 来源:https://blog.csdn.net/qq_34369588/article/details/146606864  浏览:    关键词:MyBatis分页插件混用问题解析:IPage与PageHelper的冲突与解决

一、背景

在同时使用 MyBatis-PlusIPage 分页 和 PageHelper 时,开发者可能会遇到以下两类问题:

  • 分页结果异常:IPage 查询的 total 总条数返回 0,但实际数据正常。
  • 依赖冲突报错:启动时报错 Column.withColumnName() 方法不存在,因 jsqlparser 版本不兼容。

二、分析

1、问题一:IPage 查询的 total 为 0

(1)原因:
  • 拦截器冲突:PageHelper和MyBatis-Plus的分页拦截器均会修改SQL,导致分页逻辑被覆盖。

  • 分页参数残留:PageHelper通过ThreadLocal保存分页参数,若未清除,会影响后续IPage查询。

(2)解决方案
  • 统一分页工具:避免混用,统一使用MyBatis-Plus的IPage或PageHelper。
  • 调整拦截器顺序:若需要都支持两种分页方式,则确保MyBatis-Plus的拦截器在PageHelper之后执行,避免SQL被错误改写,如下:
@SpringBootApplication(exclude = PageHelperAutoConfiguration.class) // 禁用PageHelper自动配置
public class Application { ... }
@Configuration
public class MyBatisConfig {// 先注册PageHelper拦截器@Beanpublic PageInterceptor pageInterceptor() {PageInterceptor pageInterceptor = new PageInterceptor();Properties props = new Properties();props.setProperty("helperDialect", "mysql");pageInterceptor.setProperties(props);return pageInterceptor;}// 后注册MyBatis-Plus拦截器@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

2、问题一:jsqlparser版本冲突报错

(1)报错信息如下:
Caused by: java.lang.NoSuchMethodError: 
net.sf.jsqlparser.schema.Column.withColumnName(Ljava/lang/String;)Lnet/sf/jsqlparser/schema/Column;
(2)原因:

  MyBatis-Plus的PaginationInnerInterceptor依赖jsqlparser 4.5+,而PageHelper可能引入旧版本(如3.2),导致方法缺失。

(3)解决方案
  • 升级jsqlparser版本,并显式引入高版本jsqlparser(如4.6)
  • 推荐 MyBatis-Plus 3.5.3+(兼容 jsqlparser 4.6)
<!-- 排除 PageHelper 中的旧版本 jsqlparser -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version><exclusions><exclusion><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId></exclusion></exclusions>
</dependency><!-- 显式引入新版本 jsqlparser -->
<dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.6</version>
</dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> <!-- 使用最新版本 -->
</dependency>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com