当前位置: 首页 > news >正文

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拦截器
    @Bean
    public PageInterceptor pageInterceptor() {
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties props = new Properties();
        props.setProperty("helperDialect", "mysql");
        pageInterceptor.setProperties(props);
        return pageInterceptor;
    }
    
    // 后注册MyBatis-Plus拦截器
    @Bean
    public 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>

相关文章:

  • Linux系统部署OA项目
  • 初识MySQl · 内置函数
  • OpenCV图像处理:边缘检测
  • YOLOv8 中的损失函数解析
  • 《 C语言实现:金字塔式星号图案打印》
  • Transformer革命:人工智能如何突破语言理解的边界
  • MCP 学习笔记(1)
  • 广告牌变“高空炸弹“?智能预警终端筑起安全防线!
  • [原创](Modern C++)现代C++的关键性概念: 如何利用多维数组的指针安全地遍历所有元素
  • 解读Linux中的fork机制
  • kafka 报错消息太大解决方案 Broker: Message size too large
  • Error:Flash Download failed
  • 应用UID分配
  • 构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)
  • 2025NCTF--Web
  • 智慧电力:点亮未来能源世界的钥匙
  • 《Linux运维实战:Ubuntu 22.04配置pam实现密码复杂度策略》
  • 【计算机网络】OSI七层模型完全指南:从比特流到应用交互的逐层拆解
  • Java基础关键_031_反射(一)
  • WebRTC C++开发入门
  • 中国海警就菲向非法“坐滩”仁爱礁军舰运补发表谈话
  • 法国参议院调查委员会公布雀巢“巴黎水”丑闻调查报告
  • 河北6人在河道倒污泥被控污染环境案撤诉后,已拿到国赔决定书
  • 住建部:2019年至2024年,全国累计开工改造老旧小区28万个
  • 搜狐一季度营收1.36亿美元,净亏损同比收窄超两成
  • “打铁”热邂逅江南水乡,长三角首个国际级铁三赛事有何不同