MyBatis-Plus与PageHelper的jsqlparser库冲突问题

背景介绍

在最近的一个项目中,我们决定将Spring Boot升级至3.x版本,并同时升级了MyBatis-Plus到最新版本(3.5.7)。然而,在完成这些升级之后,我们遇到了一个问题:分页插件PageHelper无法正常工作。经过排查发现,这是因为MyBatis-Plus和PageHelper都依赖于jsqlparser库,但它们所依赖的版本存在冲突。

问题描述

我们的项目使用了以下依赖:

  • MyBatis-Plus: 版本3.5.7
  • PageHelper: 版本2.1.0

PageHelper 要求使用的jsqlparser版本为4.7,而MyBatis-Plus 可能引入了一个不同版本的jsqlparser。这种不一致导致了兼容性问题,使得PageHelper不能正确解析SQL语句,从而影响了其分页功能的正常使用。

冲突原因分析

由于两个库都依赖于jsqlparser,当两个库对jsqlparser的版本有不同的需求时,就会发生冲突。例如,PageHelper需要jsqlparser的特定版本来确保其解析SQL的能力,而MyBatis-Plus可能引入了一个更新或更旧版本的jsqlparser,这可能会破坏PageHelper的功能。

解决方案详解

为了确保项目的正常运行,我们需要手动解决这个依赖冲突。以下是详细的解决方案:

步骤一:排除冲突的jsqlparser依赖

pom.xml文件中,针对MyBatis-Plus和PageHelper的依赖,分别排除其自带的jsqlparser依赖。这样做的目的是避免自动导入的jsqlparser版本之间产生冲突。

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.7</version>
    <exclusions>
        <exclusion>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>2.1.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
        </exclusion>
    </exclusions>
</dependency>
步骤二:添加指定版本的jsqlparser依赖

接下来,在pom.xml中明确添加jsqlparser 4.7版本的依赖。这样做是为了确保项目中所有依赖jsqlparser的地方都使用相同版本的库,从而避免潜在的兼容性问题。

xml 复制代码
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>4.7</version>
</dependency>
注意事项

尽管通过上述步骤可以解决依赖冲突问题,但在实际开发过程中,还是建议尽量避免同时使用MyBatis-Plus和PageHelper。因为即使解决了当前的版本冲突问题,未来随着库的更新,可能会出现新的不兼容情况。此外,MyBatis-Plus自身也提供了分页插件,可以作为替代方案考虑。

相关推荐
jason.zeng@150220724 分钟前
Androidr入门环境搭建
java·kotlin
摇滚侠27 分钟前
整洁的桌面和任务栏 Java 开发工程师提效方法
java·开发语言
每天都要加油呀!1 小时前
多租户中间件适配
java·多租户
014-code1 小时前
Java 并发中的原子类
java·开发语言·并发
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第29题:静态代理和动态代理的区别是什么
java·开发语言·后端·面试·代理模式
善恶怪客1 小时前
Java-数组和可变参数
java·开发语言
小编码上说1 小时前
LSH(局部敏感哈希)分桶,海量数据下的相似性搜索解决方案
java·spring boot·缓存·langchain4j·lsh·局部敏感哈希·ai调用优化
计算机_毕业设计2 小时前
java-springboot数字藏品系统 基于 SpringBoot 的区块链数字艺术品交易平台 Java 微服务架构下的加密藏品展示与拍卖系统计算机毕业设计
java·spring boot·课程设计
ONVO ncen2 小时前
Redis6.2.6下载和安装
java
丑八怪大丑2 小时前
JDK8-17新特性
java·开发语言