在Springboot 3 项目中配置 mybatis-plus 需要注意哪些事项

30 阅读3分钟

在 Spring Boot 3 中配置 MyBatis-Plus 时,需要注意以下几个关键事项,这些事项主要源于 Spring Boot 3 本身的重大变化(如迁移到 Jakarta EE)以及 MyBatis-Plus 自身版本的演进:

  1. 依赖版本兼容性 (最重要):

    • 必须使用 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 不兼容的 mybatismybatis-spring 的旧版本依赖。
  2. Java 版本要求:

    • Spring Boot 3 要求 Java 17 或更高版本。确保你的开发和运行环境满足此要求。MyBatis-Plus 3.5.x+ 也已适配 Java 17+。
  3. 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 不强制依赖它们,但如果你用了,也需要将 importjavax.persistence.* 更新为 jakarta.persistence.*
  4. 拦截器配置方式变更 (非常重要):

    • 旧版(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 定义。
  5. 配置文件 (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 兼容。
  6. Mapper 接口扫描:

    • 继续使用 @MapperScan("com.yourcompany.mapper") 注解在启动类或配置类上,或者在每个 Mapper 接口上添加 @Mapper 注解。这部分配置方式不变。
  7. 代码生成器 (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+ 并仔细测试。

扫码搜索联合传播样式-标准色版.png