在 Spring Boot 3 中配置 MyBatis-Plus 时,需要注意以下几个关键事项,这些事项主要源于 Spring Boot 3 本身的重大变化(如迁移到 Jakarta EE)以及 MyBatis-Plus 自身版本的演进:
-
依赖版本兼容性 (最重要):
- 必须使用
mybatis-plus-spring-boot3-starter
3.5.x 或更高版本。 这是为了兼容 Spring Boot 3 和 Jakarta EE 规范。低于 3.5.x 的版本是为 Spring Boot 2 设计的,无法在 Spring Boot 3 环境下工作。 - 在
pom.xml
(Maven) 或build.gradle
(Gradle) 中确保版本正确:<!-- Maven --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <!-- 使用与你的 Spring Boot 3.x 版本兼容的最新 3.5.x 或更高版本 --> <version>3.5.11</version> <!-- 示例版本,请查阅最新兼容版本 --> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-jsqlparser</artifactId> <version>3.5.11</version> <!-- 必须与上面的版本保持一致 --> </dependency>
- 同时,确保没有手动引入与 Starter 不兼容的
mybatis
或mybatis-spring
的旧版本依赖。
- 必须使用
-
Java 版本要求:
- Spring Boot 3 要求 Java 17 或更高版本。确保你的开发和运行环境满足此要求。MyBatis-Plus 3.5.x+ 也已适配 Java 17+。
-
Jakarta EE 迁移的影响:
- 数据源 (DataSource): Spring Boot 3 使用
jakarta.sql.DataSource
。MyBatis-Plus Starter (3.5.x+) 会自动适配,只要你配置的数据源(如 HikariCP, Druid)本身兼容 Spring Boot 3 即可。通常无需在 MyBatis-Plus 配置层面特别处理数据源的包名。 - 验证注解 (Bean Validation): 如果你的实体类 (Entity) 中使用了 JSR 380/Jakarta Bean Validation 注解(如
@NotNull
,@NotBlank
,@Size
等),必须将import
语句从javax.validation.*
更新为jakarta.validation.*
。 - 持久化注解 (JPA Annotations): 如果你混合使用了 JPA 注解(如
@Entity
,@Id
,@Table
等),虽然 MyBatis-Plus 不强制依赖它们,但如果你用了,也需要将import
从javax.persistence.*
更新为jakarta.persistence.*
。
- 数据源 (DataSource): Spring Boot 3 使用
-
拦截器配置方式变更 (非常重要):
- 旧版(3.4.0 之前)可能直接配置
PaginationInterceptor
。 - 新版(3.4.0 及以后,包括 3.5.x)必须使用
MybatisPlusInterceptor
作为统一的拦截器容器。你需要创建一个MybatisPlusInterceptor
的 Bean,并将各种内部拦截器(如分页、乐观锁等)添加到这个容器中。 - 示例配置 (
@Configuration
类中):import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; // 示例:乐观锁 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 1. 添加分页插件 (PaginationInnerInterceptor) // !!! 必须指定数据库类型 DbType !!! PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); // 根据你的数据库修改 // 可选配置: 设置单页限制、溢出处理等 // paginationInnerInterceptor.setMaxLimit(500L); interceptor.addInnerInterceptor(paginationInnerInterceptor); // 2. 添加乐观锁插件 (OptimisticLockerInnerInterceptor) - 如果需要 // interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 3. 添加其他插件... (如防全表更新 BlockAttackInnerInterceptor) return interceptor; } }
- 关键点:
- 必须创建
MybatisPlusInterceptor
Bean。 - 使用
addInnerInterceptor()
添加所需插件。 - 创建
PaginationInnerInterceptor
时,必须传入正确的DbType
(例如DbType.MYSQL
,DbType.POSTGRE_SQL
,DbType.ORACLE
等)。 - 移除任何旧的
PaginationInterceptor
或单独配置PaginationInnerInterceptor
的 Bean 定义。
- 必须创建
- 旧版(3.4.0 之前)可能直接配置
-
配置文件 (
application.properties
/application.yml
):- 核心属性稳定: 大多数
mybatis-plus.*
配置项保持不变,例如:mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
mybatis-plus.type-aliases-package=com.example.entity
mybatis-plus.global-config.db-config.logic-delete-field=deleted
mybatis-plus.global-config.db-config.id-type=ASSIGN_ID
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- 建议查阅文档: 虽然核心稳定,但最好还是快速浏览一下你使用的 MyBatis-Plus 3.5.x+ 版本的官方文档,确认是否有少量属性被废弃、重命名或行为调整。
- 数据源属性: 确保你的
spring.datasource.*
配置与 Spring Boot 3 兼容。
- 核心属性稳定: 大多数
-
Mapper 接口扫描:
- 继续使用
@MapperScan("com.yourcompany.mapper")
注解在启动类或配置类上,或者在每个 Mapper 接口上添加@Mapper
注解。这部分配置方式不变。
- 继续使用
-
代码生成器 (MyBatis-Plus Generator):
- 如果使用代码生成器,确保其版本也与
mybatis-plus-boot-starter
兼容(通常使用相同版本号)。 - 检查生成器模板,确保生成的实体类中如果包含验证注解或 JPA 注解,导入的是
jakarta.*
包。
- 如果使用代码生成器,确保其版本也与
总结:
在 Spring Boot 3 中配置 MyBatis-Plus,核心是 更新 Starter 版本到 3.5.x+,并 采用新的 MybatisPlusInterceptor
方式配置插件(特别是分页插件,务必指定 DbType
)。同时,要处理好代码中因 Jakarta EE 迁移导致的包名变更(主要是 jakarta.validation.*
和 jakarta.persistence.*
)。最后,确保 Java 版本为 17+ 并仔细测试。