概述: mybatis结合Spring 之后如下图所示:
以下是与 Spring 与Mybatis集成时的典型配置步骤和相关代码:
- Spring 容器启动并初始化
DataSource
。 SqlSessionFactoryBean
被实例化,并注入DataSource
。SqlSessionFactoryBean
创建SqlSessionFactory
。MapperScannerConfigurer
被配置来扫描并注册 Mapper 接口。- Mapper 接口使用
SqlSessionFactory
来获取数据库连接和执行 SQL 操作。
1. 添加依赖
在项目的 pom.xml
文件中添加 MyBatis-Spring 的依赖:
xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>版本号</version>
</dependency>
2. 配置 DataSource
在 Spring 的配置文件中配置数据源 DataSource
:
xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="数据库驱动类" />
<property name="url" value="数据库URL" />
<property name="username" value="数据库用户名" />
<property name="password" value="数据库密码" />
</bean>
或者在 Spring Boot 的 application.properties
或 application.yml
中配置:
properties
spring.datasource.url=数据库URL
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码
spring.datasource.driver-class-name=数据库驱动类
3. 配置 SqlSessionFactory
在 Spring 配置文件中配置 SqlSessionFactory
:
xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
在 Spring Boot 中,可以省略这一步,因为 mybatis-spring-boot-starter
会自动配置 SqlSessionFactory
。
4. 配置 SqlSessionTemplate
SqlSessionTemplate
是 SqlSession
的实现,它会代理一个 SqlSession
的调用,将 SqlSession
的创建和关闭交给 Spring 管理。
xml
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
在 Spring Boot 中,SqlSessionTemplate
也会被自动配置。
5. 配置 Mapper 接口
在 Spring 配置文件中配置 Mapper 接口:
xml
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
在 Spring Boot 中,可以使用 @MapperScan
注解来自动扫描和注册 Mapper 接口:
java
@SpringBootApplication
@MapperScan("com.example.mapper")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
启动过程
当 Spring 应用启动时,它会根据配置文件或注解创建和初始化所有的 bean。对于 MyBatis 集成:
- Spring 容器启动。
- 数据源
DataSource
被创建并配置。 SqlSessionFactory
被创建。Spring 调用SqlSessionFactoryBean
,它背后使用SqlSessionFactoryBuilder
来构建SqlSessionFactory
。SqlSessionTemplate
被创建,它将被用作SqlSession
的代理。- Mapper 接口被扫描并注册为 Spring bean,它们内部使用
SqlSessionTemplate
。 - 应用程序现在可以注入 Mapper 接口并使用它们来执行数据库操作。
通过这种方式,MyBatis 与 Spring 的集成使得数据库操作的事务管理和依赖注入更加简单和一致。
Spring 和 MyBatis 的结合为开发者提供了一个强大的数据访问框架,它结合了 Spring 的依赖注入和事务管理能力以及 MyBatis 的灵活性和对 SQL 的精细控制。通过这种集成,开发者可以利用 MyBatis 易于使用的映射和会话管理,同时享受 Spring 提供的声明式事务和简化的资源管理。Spring 通过其 IoC 容器自动配置和管理 MyBatis 的核心组件,如 SqlSessionFactory
和 SqlSession
,并通过 MapperScannerConfigurer
或 @MapperScan
注解自动发现和注册 Mapper 接口。这种集成方式简化了配置过程,提高了开发效率,并有助于维护大型项目的清晰结构。
总的来说,Spring 和 MyBatis 的结合使得 Java 应用的数据库操作变得既简洁又强大,允许开发者专注于业务逻辑,同时确保了应用的可扩展性和可维护性。