MyBatis-Spring 整合开发快速入门指南
2025-07-10 05:22:46作者:蔡怀权
概述
MyBatis-Spring 是 MyBatis 与 Spring 框架整合的关键组件,它允许开发者将 MyBatis 无缝集成到 Spring 应用中。本文将详细介绍如何快速搭建一个基于 MyBatis-Spring 的应用程序。
环境准备
依赖安装
要使用 MyBatis-Spring 模块,需要在项目中添加以下 Maven 依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>最新版本号</version>
</dependency>
注意:这里需要替换最新版本号
为实际使用的版本。该依赖会自动引入 MyBatis 核心库和 Spring 相关依赖。
基础配置
配置 SqlSessionFactory
在 Spring 应用中,首先需要配置 SqlSessionFactory
,它是 MyBatis 的核心工厂类。可以通过 XML 或 Java Config 两种方式配置:
XML 配置方式:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
Java Config 配置方式:
@Configuration
public class MyBatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource());
return factoryBean.getObject();
}
}
关键点说明:
SqlSessionFactoryBean
是 Spring 的 FactoryBean 实现- 必须设置数据源(dataSource)属性
- 数据源配置与普通 Spring JDBC 配置相同
映射器(Mapper)配置
定义 Mapper 接口
首先创建一个 Mapper 接口,可以使用注解或 XML 方式定义 SQL:
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{userId}")
User getUser(@Param("userId") String userId);
}
注册 Mapper 到 Spring 容器
XML 配置方式:
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</property>
Java Config 配置方式:
@Configuration
public class MyBatisConfig {
@Bean
public UserMapper userMapper() throws Exception {
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory());
return sqlSessionTemplate.getMapper(UserMapper.class);
}
}
重要说明:
- Mapper 必须是接口,不能是具体实现类
- 可以使用注解或 XML 方式定义 SQL
- Spring 会自动管理 SqlSession 的生命周期
业务层使用
配置完成后,可以像使用普通 Spring Bean 一样注入 Mapper:
@Service
public class UserServiceImpl implements UserService {
private final UserMapper userMapper;
// 构造器注入
public UserServiceImpl(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User getUserById(String userId) {
return userMapper.getUser(userId);
}
}
事务管理
MyBatis-Spring 会自动参与 Spring 的事务管理:
- 在有 Spring 事务的上下文中,SqlSession 会绑定到当前事务
- 事务提交或回滚时,SqlSession 会自动关闭
- MyBatis 异常会被转换为 Spring 的 DataAccessException
最佳实践建议
- 推荐使用构造器注入方式注入 Mapper
- 对于复杂 SQL,建议使用 XML 映射文件方式
- 生产环境应考虑添加二级缓存配置
- 可以通过 SqlSessionFactoryBean 设置 typeAliases、typeHandlers 等
通过以上步骤,您已经完成了 MyBatis-Spring 的基础集成,可以在此基础上构建更复杂的应用。