首页
/ MyBatis-Spring 整合开发快速入门指南

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();
  }
}

关键点说明:

  1. SqlSessionFactoryBean 是 Spring 的 FactoryBean 实现
  2. 必须设置数据源(dataSource)属性
  3. 数据源配置与普通 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);
  }
}

重要说明:

  1. Mapper 必须是接口,不能是具体实现类
  2. 可以使用注解或 XML 方式定义 SQL
  3. 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 的事务管理:

  1. 在有 Spring 事务的上下文中,SqlSession 会绑定到当前事务
  2. 事务提交或回滚时,SqlSession 会自动关闭
  3. MyBatis 异常会被转换为 Spring 的 DataAccessException

最佳实践建议

  1. 推荐使用构造器注入方式注入 Mapper
  2. 对于复杂 SQL,建议使用 XML 映射文件方式
  3. 生产环境应考虑添加二级缓存配置
  4. 可以通过 SqlSessionFactoryBean 设置 typeAliases、typeHandlers 等

通过以上步骤,您已经完成了 MyBatis-Spring 的基础集成,可以在此基础上构建更复杂的应用。