当前位置: 首页 > 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>
http://www.dtcms.com/a/96559.html

相关文章:

  • 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++开发入门
  • 2007-2019年各省地方财政教育支出数据
  • AI 对话艺术:Prompt 设计技巧与案例解析
  • DriveDreamer动力学模块和博弈论优化器
  • 蓝桥杯备考:BFS之马的遍历
  • <AI>dify本地部署
  • 基于音频驱动的CATIA动态曲面生成技术解析
  • 【服务器操作指南 - GPU 使用与文件传输】轻松掌握 GPU 状态查看和服务器文件传输技巧
  • NVIDIA「官方外挂」发布!RTX 5060没发售就淘汰了
  • Github Webhook 以及主动式
  • 《Java编程思想》读书笔记:第八章 多态