Spring Boot 2.6.15 + MyBatis-Plus 3.5.1 升级至 3.3.2 + 3.5.7 全流程指南

发布于:2025-04-04 ⋅ 阅读:(55) ⋅ 点赞:(0)

Spring Boot 2.6.15 + MyBatis-Plus 3.5.1 升级至 3.3.2 + 3.5.7 全流程指南


一、核心依赖对比与关键变更

1.1 Spring Boot 父级依赖升级

<!-- 升级前 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.15</version>
</parent>

<!-- 升级后 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.2</version>
</parent>

关键变更
• JDK 17+ 强制要求(原为 JDK 1.8)
• Jakarta EE 9+ 命名空间替代 Java EE(所有 javax.* 需改为 jakarta.*


1.2 MyBatis-Plus 依赖重构

<!-- 升级前 -->
 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

<!-- 升级后 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.7</version>
    <exclusions>
        <exclusion>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
        </exclusion>
    </exclusions>
</dependency>

关键变更
• 必须使用 mybatis-plus-spring-boot3-starter 适配 Spring Boot 3.x
• 显式排除旧版 SQL 解析器(避免与 JDK 17 冲突)

兼容性说明:MyBatis-Plus 3.5.7 是 Spring Boot 3.x 的专用适配版本,需使用 替代旧版 starter。

问题风险:需检查是否排除旧版依赖(如原 mybatis-spring-boot-starter 已注释掉,符合要求)。


1.3 编译环境调整

<!-- 升级前 -->
<plugin>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

<!-- 升级后 -->
<plugin>
    <configuration>
        <source>17</source>
        <target>17</target>
    </configuration>
</plugin>

必要性:Spring Boot 3.x 编译要求 JDK 17+ 字节码


二、配置层改造要点

2.1 MyBatis-Plus 配置适配

# 升级前配置
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*.xml

# 升级后新增配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: auto

注意事项
• 移除 mybatis-spring-boot-starter 依赖(已由新 starter 包含)
• 分页插件需改用 MybatisPlusInterceptor 配置


2.2 分页插件重构示例

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

变更说明:旧版 PaginationInterceptor 已废弃


三、代码层适配策略

3.1 核心 API 变更适配

// 升级前用法
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("status", 1);

// 升级后推荐写法
LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery();
wrapper.eq(User::getStatus, 1);

优势:避免 SQL 注入风险,支持编译期字段检查


3.2 事务注解迁移

// 升级前
import javax.transaction.Transactional;

// 升级后
import jakarta.transaction.Transactional;

注意:需全局替换所有 javax.persistencejavax.servlet 引用


四、验证与调试

4.1 健康检查验证

management.endpoints.web.exposure.include=health,info

访问 /actuator/health 确认数据源状态


4.2 SQL 日志监控

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

作用:实时输出执行的 SQL 语句


五、典型问题解决方案

5.1 依赖冲突排查

mvn dependency:tree -Dincludes=com.baomidou,com.github.jsqlparser

常见冲突点
mybatis-plus-boot-starter 残留(需完全移除)
jsqlparser 版本需 ≥4.9(已通过 exclusion 解决)


5.2 自动填充失效

@Component
public class MetaHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
    }
}

修复要点:必须实现 strictInsertFill 方法


六、升级后技术全景

组件 升级前版本 升级后版本 关键特性
Spring Boot 2.6.15 3.3.2 原生支持 JDK 17 LTS,Jakarta EE 9+
MyBatis-Plus 3.5.1 3.5.7 增强 Lambda 表达式支持,分页插件重构
SQL 解析器 jsqlparser 3.2 jsqlparser 4.9 支持 JDK 17 语法特性

参考资料
MyBatis-Plus 3.5.7 官方升级日志
Spring Boot 3.x 迁移指南


网站公告

今日签到

点亮在社区的每一天
去签到