1. 为什么需要Spring整合MyBatis?
在企业级Java开发中,Spring和MyBatis是两个不可或缺的框架。Spring提供了强大的IoC容器和事务管理能力,而MyBatis则是优秀的持久层框架。但原生MyBatis存在几个痛点:
- SqlSessionFactory需要手动创建和管理
- Mapper接口需要手动注册
- 事务管理需要额外编码
Spring整合MyBatis的核心价值就在于解决这些问题。通过整合,我们可以:
- 让Spring容器管理SqlSessionFactory的生命周期
- 自动扫描和注册Mapper接口
- 与Spring声明式事务无缝集成
实际项目中,90%的MyBatis使用场景都会选择与Spring整合。这不仅减少了样板代码,更重要的是获得了Spring生态的强大支持。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 依赖管理
使用Maven构建项目时,需要以下核心依赖:
xml复制<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.28</version>
</dependency>
<!-- MyBatis-Spring整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.1.1</version>
</dependency>
<!-- 数据库相关 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.16</version>
</dependency>
2.2 数据源配置
在Spring配置文件中配置数据源:
xml复制<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="20"/>
</bean>
3. MyBatis核心组件配置
3.1 SqlSessionFactory配置
SqlSessionFactory是MyBatis的核心入口,Spring通过FactoryBean方式创建:
xml复制<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 指定MyBatis全局配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 指定mapper.xml文件位置 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
3.2 Mapper接口扫描
传统方式需要为每个Mapper接口配置MapperFactoryBean,Spring提供了自动扫描机制:
xml复制<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
4. 事务管理集成
4.1 声明式事务配置
Spring的声明式事务可以与MyBatis完美集成:
xml复制<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 开启注解驱动的事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
4.2 事务使用示例
在Service层使用@Transactional注解:
java复制@
