MyBatis 与 Spring Boot 集成

Spring Boot 场景下,mybatis-spring-boot-starter(官方整合项目)把上一章的装配全部自动化:只要引入依赖、配几个 mybatis.* 属性、给 Mapper 接口打个注解,就能直接注入使用。

添加依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.x</version> <!-- Spring Boot 3 用 3.0.x;Boot 2 用 2.3.x -->
</dependency>

版本对应关系(starter ↔ Spring Boot ↔ mybatis-spring ↔ MyBatis)以官方文档为准,一般原则:Boot 2.x 配 starter 2.3.x,Boot 3.x 配 starter 3.0.x 及以上。Boot 3 基于 Jakarta EE,也请确认驱动与依赖兼容。

starter 自动做了三件事

  1. 探测容器里唯一的 DataSource,自动创建 SqlSessionFactory(含 SqlSessionFactoryBean 的装配逻辑)。
  2. 自动注册 SqlSessionTemplate
  3. 发现并注册 Mapper:接口上带 @Mapper 注解会被自动扫描;或用 @MapperScan 指定更广的扫描包(优先于自动扫描,以官方文档为准)。

application.yml 常用配置

mybatis:
  mapper-locations: classpath*:mapper/**/*.xml   # 映射 XML 位置
  type-aliases-package: com.example.entity        # 实体类别名包
  type-handlers-package: com.example.handler      # 自定义 TypeHandler 包(可选)
  configuration:
    map-underscore-to-camel-case: true            # user_name → userName
    cache-enabled: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # executor-type: SIMPLE        # 执行器:SIMPLE/REUSE/BATCH
  # configuration-properties:    # 传给全局配置的属性
  # database-id: mysql           # 指定 databaseId(可选)

要点(均以 mybatis-spring-boot-autoconfigure 官方文档为准):

  • mybatis.mapper-locations 指定 XML 位置,支持 classpath*: 通配符。
  • mybatis.configuration.* 直接对应 org.apache.ibatis.session.Configuration 的属性,逐项配置即可,无需再写 mybatis-config.xml。
  • 若坚持使用 mybatis-config.xml,用 mybatis.config-location 引入;config-locationconfiguration.* 不要同时配置。
  • 执行器类型 mybatis.executor-type:SIMPLE(默认)/ REUSE / BATCH。

最小可用示例

Mapper 接口(XML 或注解都行):

@Mapper   // 让 starter 自动注册该接口
public interface UserMapper {
    @Select("SELECT id, name, age FROM user WHERE id = #{id}")
    User selectById(Integer id);
}

使用处直接注入:

@Service
public class UserService {
    private final UserMapper userMapper;

    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Transactional          // 事务仍由 Spring 管理
    public void register(User user) {
        userMapper.insert(user);
    }
}

注意事项

  • 多数据源:starter 默认按"唯一 DataSource"自动装配;多个数据源时需要手动定义各自的 SqlSessionFactory/SqlSessionTemplate,并配合 @MapperScan 区分(复杂场景以官方文档为准)。
  • 启动时若报"Invalid bound statement":检查 mapper-locations 是否覆盖了 XML、XML 的 namespace 是否等于接口全限定名、语句 id 是否等于方法名。
  • 想让 SQL 打到控制台,把 mybatis.configuration.log-impl 配成 StdOutImpl(或接入 SLF4J/Logback)。

小结

starter 三行配置即可开箱:加依赖、写 mybatis.* 属性、接口标 @Mapper(或 @MapperScan)。从原生方式一路走到这里,SqlSession、XML、事务这些概念都通了,接 Boot 只是"自动装配"替你代劳。完整配置项与版本矩阵以官方文档为准。

笔记加载中…