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.StdOutImplglobal-config:db-config:id-type: auto
注意事项:
• 移除 mybatis-spring-boot-starter
依赖(已由新 starter 包含)
• 分页插件需改用 MybatisPlusInterceptor
配置
2.2 分页插件重构示例
@Configuration
public class MybatisPlusConfig {@Beanpublic 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.persistence
和 javax.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 {@Overridepublic 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 迁移指南