1. 基本整合方式
1.1 整合思路
Spring框架与Mybatis框架的整合,主要是为了让Mybatis能够充分利用Spring的依赖注入(DI)和面向切面编程(AOP)特性,简化开发流程,提高代码的可维护性和扩展性。整合的主要思路是通过Spring来管理Mybatis的SqlSessionFactory以及Mapper接口,并且利用Spring提供的事务管理功能来处理数据库事务。
1.2 整合所需要的依赖及配置
依赖
在项目的pom.xml
文件中,需要添加以下依赖:
- Spring框架相关依赖:如spring-context、spring-jdbc等。
- Mybatis框架相关依赖:如mybatis、mybatis-spring等。
- 数据库驱动:如mysql-connector-java等,取决于你使用的数据库类型。
- 连接池:如druid、c3p0等,用于管理数据库连接。
- 其他可能需要的依赖:如日志框架(log4j、slf4j等)、测试框架(junit等)。
配置
- Spring配置文件:用于配置数据源、SqlSessionFactory、Mapper接口等。
- Mybatis配置文件(可选):如果保留Mybatis的核心配置文件,则需要在Spring配置文件中指定其位置。如果不保留,则所有配置都可以在Spring配置文件中完成。
1.3 使用Spring配置文件配置数据库
在Spring配置文件中配置数据源(DataSource),通常使用连接池来管理数据库连接。以下是一个使用c3p0作为连接池的例子:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/yourdatabase?useSSL=false"/>
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="user" value="root"/>
<property name="password" value="yourpassword"/>
<!-- 其他连接池配置 -->
</bean>
1.4 通过Spring配置文件创建SqlSessionFactory
SqlSessionFactory是Mybatis的核心接口,用于创建SqlSession。在Spring配置文件中,我们使用SqlSessionFactoryBean
来创建SqlSessionFactory的实例。
不保留Mybatis核心配置文件
如果不保留Mybatis的核心配置文件,所有的配置都可以在Spring配置文件中完成。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 其他Mybatis配置,如别名、映射文件位置等 -->
<property name="typeAliasesPackage" value="com.example.model"/>
<property name="mapperLocations" value="classpath*:mapper/*.xml"/>
</bean>
保留Mybatis核心配置文件
如果保留Mybatis的核心配置文件,则需要在Spring配置文件中指定其位置。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
2. 映射器整合方式
2.1 Mapper接口与XML映射文件
Mybatis的Mapper接口用于定义数据库操作的方法,而XML映射文件则定义了这些方法的SQL语句。在Spring与Mybatis整合后,Mapper接口可以直接通过Spring的依赖注入(DI)功能注入到业务层或其他服务层中。
使用MapperFactoryBean
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.example.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
使用@Mapper注解
在Spring Boot项目中,更常见的做法是在Mapper接口上使用@Mapper
注解,并启用@MapperScan
来自动扫描Mapper接口。
@Mapper
public interface UserMapper {
// 定义数据库操作方法
}
@Configuration
@MapperScan("com.example.mapper")
public class MybatisConfig {
// 其他配置
}
3. 声明式事务
3.1 回顾事务
事务是一组不可分割的操作序列,它们作为一个整体一起向系统提交,要么全部成功,要么全部失败。