Spring Boot集成MyBatis核心是自动装配SqlSessionFactory与Mapper接口,需添加mybatis-spring-boot-starter依赖、配置数据源及mybatis属性(如mapper-locations)、编写@Mapper接口并注入使用;传统Spring项目则需手动配置SqlSessionFactoryBean和MapperScannerConfigurer。

在 Spring 框架中集成 MyBatis,核心是让 Spring 管理 MyBatis 的 SqlSessionFactory 和 Mapper 接口,避免手动创建 SqlSession。推荐使用 MyBatis-Spring-Boot-Starter(Spring Boot 项目)或 mybatis-spring(传统 Spring XML/Java 配置项目),下面分两种常见场景说明关键步骤。
Spring Boot 项目:自动配置方式(最常用)
只需添加依赖、配置数据源和 MyBatis 相关属性,Spring Boot 会自动装配 SqlSessionFactory 和 Mapper 扫描器。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 添加 Maven 依赖(以 Maven 为例):
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version> <!-- 适配 Spring Boot 3.x;若用 2.x,请选 2.3.x 版本 -->
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
- 配置
application.yml:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml <!-- 可选:指定 XML 映射文件位置 -->
type-aliases-package: com.example.demo.entity <!-- 可选:为实体类起别名 -->
- 编写 Mapper 接口(无需实现类):
public interface UserMapper {
User selectById(Long id);
}
- 在 Service 中直接注入使用:
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUser(Long id) {
return userMapper.selectById(id);
}
}
传统 Spring(非 Boot)项目:手动配置 SqlSessionFactoryBean
需在 Spring 配置中显式定义 SqlSessionFactoryBean 和 MapperScannerConfigurer。
- 引入必要依赖(Maven):
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
- Spring XML 配置示例(
applicationContext.xml):
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
<property name="typeAliasesPackage" value="com.example.entity"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
</bean>
关键注意事项
-
事务管理必须开启:MyBatis 操作默认不自动提交,需配合
@Transactional注解或 XML 配置事务增强,否则 insert/update/delete 不生效。 -
Mapper 接口与 XML 文件命名/路径要匹配:例如
UserMapper.java对应UserMapper.xml,且 namespace 必须为接口全限定名。 - 避免循环依赖:若 Mapper 被多个 Service 注入,确保 Service 层不相互强依赖;MyBatis Mapper 本身是无状态的,可安全共享。
-
动态 SQL 建议用注解或 XML:简单语句可用
@Select等注解,复杂逻辑(if/foreach)强烈建议用 XML,更清晰易维护。
调试小技巧
- 开启 MyBatis 日志:在
application.yml加logging.level.com.example.mapper=DEBUG,可看到完整 SQL 和参数绑定。 - 检查是否扫描到 Mapper:启动时看日志是否有类似
MapperFactoryBean created for [com.example.mapper.UserMapper]。 - XML 文件未加载?确认路径拼写正确、资源被 Maven 正确打包(
src/main/resources/mapper/下而非java目录)。

















