Spring Boot 微服务中集成 MyBatis-Plus 与集成原生 MyBatis 有哪些配置上的不同?

在Spring Boot 微服务中集成 MyBatis-Plus (MP) 与集成原生 MyBatis (MB) 在配置上的主要不同点。MyBatis-Plus 是在 MyBatis 基础上进行的增强,它兼容 MyBatis 的所有配置方式,并提供了更简洁、更强大的配置选项。

相同点:

  1. 基础数据源配置 (DataSource Configuration):

    • 完全相同。 无论是使用原生 MB 还是 MP,在 application.ymlapplication.properties 文件中配置数据库连接信息的方式是一样的。Spring Boot 会自动配置数据源(通常是 HikariCP 连接池)。

      yaml 复制代码
      spring:
        datasource:
          url: jdbc:mysql://localhost:3306/my_service_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
          username: root
          password: your_password
          driver-class-name: com.mysql.cj.jdbc.Driver
          # HikariCP Pool settings (optional, Spring Boot has defaults)
          hikari:
            maximum-pool-size: 10
            minimum-idle: 5
            connection-timeout: 30000
  2. Mapper 接口扫描 (Mapper Interface Scanning):

    • 完全相同。 两者都需要使用 @MapperScan 注解来告诉 Spring Boot 在哪个包路径下查找 Mapper 接口。

      java 复制代码
      import org.mybatis.spring.annotation.MapperScan;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      
      @SpringBootApplication
      @MapperScan("com.yourcompany.yourservice.mapper") // Specify the package containing your Mapper interfaces
      public class YourServiceApplication {
          public static void main(String[] args) {
              SpringApplication.run(YourServiceApplication.class, args);
          }
      }
  3. 类型别名包扫描 (Type Aliases Package Scanning):

    • 基本相同。 两者都可以使用 mybatis.type-aliases-package (原生 MB) 或 mybatis-plus.type-aliases-package (MP 推荐) 属性来指定实体类所在的包,以便在 XML 中或内部使用类名的简写。MP 也兼容原生的属性。

      yaml 复制代码
      # Using MyBatis-Plus recommended property
      mybatis-plus:
        type-aliases-package: com.yourcompany.yourservice.entity
      # Or using the native MyBatis property (MP is compatible)
      # mybatis:
      #  type-aliases-package: com.yourcompany.yourservice.entity
  4. 支持 mybatis-config.xml (Support for mybatis-config.xml):

    • 兼容性相同。 两者都支持通过 mybatis.config-location (原生 MB) 或 mybatis-plus.config-location (MP 推荐) 指定传统的 mybatis-config.xml 文件路径,用于进行一些 MyBatis 核心的、无法通过 properties 文件配置的设置(如自定义 TypeHandler、ObjectFactory、插件等)。但在 MP 中,由于其强大的配置能力,对 mybatis-config.xml 的依赖通常会减少。

不同点:

  1. 依赖项 (Dependencies):

    • 原生 MB: 需要引入 mybatis-spring-boot-starter

      xml 复制代码
      <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>...</version> <!-- Use compatible version -->
      </dependency>
    • MP: 需要引入 mybatis-plus-boot-starter注意:mybatis-plus-boot-starter 已经包含了 mybatis-spring-boot-starter,所以不需要重复引入原生 MB 的 starter。

      xml 复制代码
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>...</version> <!-- Use compatible version, e.g., 3.5.x -->
      </dependency>
  2. Mapper XML 文件位置 (Mapper XML Location):

    • 原生 MB: 必须通过 mybatis.mapper-locations 配置项指定 Mapper XML 文件的路径,因为核心 SQL 都写在 XML 中。

      yaml 复制代码
      mybatis:
        mapper-locations: classpath*:/mapper/**/*.xml
    • MP: 如果 你还需要编写自定义的 SQL 在 XML 文件中(MP 完全支持混合使用),那么也需要 配置 mybatis-plus.mapper-locations (推荐) 或 mybatis.mapper-locations。但如果 你主要依赖 MP 提供的通用 Mapper (BaseMapper) 和 Wrapper 条件构造器进行开发,对于基础 CRUD 和许多动态查询,你可能不需要 编写任何 XML 文件,此时这个配置项就不是必需的(但通常建议配置以备不时之需或保持一致性)。

      yaml 复制代码
      mybatis-plus:
        mapper-locations: classpath*:/mapper/**/*.xml # Configure if using custom XML SQL
  3. 全局配置 (Global Configuration):

    • 原生 MB: 大部分全局配置需要在 mybatis-config.xml 中设置,或者通过有限的 mybatis.configuration.* 属性配置(如 map-underscore-to-camel-case)。

    • MP: 提供了更丰富的 application.yml/properties 配置项来控制全局行为,主要通过 mybatis-plus.global-config.*mybatis-plus.configuration.*

      yaml 复制代码
      mybatis-plus:
        configuration:
          map-underscore-to-camel-case: true # Same as mybatis.configuration.map-underscore-to-camel-case
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # Configure logging implementation
        global-config:
          db-config:
            id-type: assign_id # Default primary key strategy (Snowflake)
            logic-delete-field: deleted # Global logic delete field name
            logic-delete-value: 1 # Logic deleted value
            logic-not-delete-value: 0 # Logic not deleted value
          banner: false # Disable MP banner on startup
    • MP 的 global-config 提供了对 ID 生成策略、逻辑删除、数据库基本配置(表名/字段名处理)、Banner 开关等 MP 特有功能的全局默认设置。

  4. 插件配置 (Plugin Configuration):

    • 原生 MB: 插件(如分页插件 PageHelper)通常需要单独引入依赖,并在 mybatis-config.xml 或通过 Java Bean 的方式进行配置和注册。

    • MP: 内置了许多常用插件(分页、乐观锁、多租户、防全表更新等),可以通过 application.yml/propertiesmybatis-plus.plugins.* 配置项直接启用和配置,更加方便和标准化。

      yaml 复制代码
      mybatis-plus:
        plugins:
          # Pagination Plugin
          pagination:
            max-limit: 500 # Max items per page
          # Optimistic Locker Plugin
          optimistic-locker:
            enabled: true
          # Block Attack Plugin (Prevent full table update/delete)
          block-attack:
            enabled: true

总结:

配置项/方面 原生 MyBatis (MB) MyBatis-Plus (MP) 异同说明
依赖 Starter mybatis-spring-boot-starter mybatis-plus-boot-starter (包含前者) 不同: 使用不同的 Starter
数据源配置 spring.datasource.* spring.datasource.* 相同: 由 Spring Boot 统一管理
Mapper 接口扫描 @MapperScan @MapperScan 相同: 都需要指定 Mapper 包路径
类型别名包 mybatis.type-aliases-package mybatis-plus.type-aliases-package (推荐, 兼容前者) 基本相同: 功能一致,MP 推荐使用其命名空间
Mapper XML 位置 mybatis.mapper-locations (通常必需) mybatis-plus.mapper-locations (推荐, 仅当使用 XML 时必需) 异同: 属性名推荐不同,对 XML 的依赖程度 MP 更低
mybatis-config.xml mybatis.config-location (较常用) mybatis-plus.config-location (推荐, 兼容前者, 依赖度降低) 异同: 都支持,但 MP 通过 properties 提供了更多配置项,减少了对 XML 的需要
全局配置 主要在 XML 或有限的 mybatis.configuration.* 更丰富的 mybatis-plus.global-config.*mybatis-plus.configuration.* 属性 不同: MP 的 Properties 配置能力更强
插件配置 通常需额外依赖 + XML/Bean 配置 内置常用插件,可通过 mybatis-plus.plugins.* 属性配置 不同: MP 极大简化了常用插件的配置

总的来说,在 Spring Boot 微服务中,MyBatis-Plus 通过其 Boot Starter 和丰富的配置属性,极大的简化了 MyBatis 的集成和配置工作,尤其是对于全局设置和常用插件的使用。它在保持与原生 MyBatis 兼容性的同时,提供了更符合 Spring Boot "约定优于配置" 理念的方式。

相关推荐
ZhengEnCi17 分钟前
@Component 注解完全指南-从入门到精通的 Spring 核心组件管理
spring boot·后端
ZhengEnCi22 分钟前
@ConfigurationProperties 注解完全指南-从入门到精通 Spring 配置属性绑定
spring boot·后端
yunmi_2 小时前
微服务,Spring Cloud 和 Eureka:服务发现工具
java·spring boot·spring cloud·微服务·eureka·架构·服务发现
paopaokaka_luck3 小时前
基于SpringBoot+Vue的志行交通法规在线模拟考试(AI问答、WebSocket即时通讯、Echarts图形化分析、随机测评)
vue.js·人工智能·spring boot·后端·websocket·echarts
程序定小飞4 小时前
基于springboot的蜗牛兼职网的设计与实现
java·数据库·vue.js·spring boot·后端·spring
咖啡Beans4 小时前
RestTemplate调用API的常用写法
java·spring boot·网络协议
卷Java4 小时前
预约记录关联查询接口说明
java·开发语言·spring boot·python·微信小程序
hzulwy5 小时前
微服务注册与监听
微服务·云原生·架构·go
跟着珅聪学java6 小时前
vue通过spring boot 下载文件教程
前端·spring boot·后端
Keepreal4967 小时前
1小时快速上手SpringBoot,熟练掌握CRUD
spring boot·后端