likes
comments
collection
share

MyBatis和Spring 的结合实现

作者站长头像
站长
· 阅读数 53

概述: mybatis结合Spring 之后如下图所示:

Spring 容器DataSourceSqlSessionFactoryBeanSqlSessionFactoryMapperScannerConfigurerMapper接口初始化数据源实例化并注入DataSource创建SqlSessionFactory配置Mapper扫描扫描并注册Mapper接口使用SqlSessionFactorySpring 容器DataSourceSqlSessionFactoryBeanSqlSessionFactoryMapperScannerConfigurerMapper接口

以下是与 Spring 与Mybatis集成时的典型配置步骤和相关代码:

  1. Spring 容器启动并初始化 DataSource
  2. SqlSessionFactoryBean 被实例化,并注入 DataSource
  3. SqlSessionFactoryBean 创建 SqlSessionFactory
  4. MapperScannerConfigurer 被配置来扫描并注册 Mapper 接口。
  5. Mapper 接口使用 SqlSessionFactory 来获取数据库连接和执行 SQL 操作。

1. 添加依赖

在项目的 pom.xml 文件中添加 MyBatis-Spring 的依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>版本号</version>
</dependency>

2. 配置 DataSource

在 Spring 的配置文件中配置数据源 DataSource

<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.propertiesapplication.yml 中配置:

spring.datasource.url=数据库URL
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码
spring.datasource.driver-class-name=数据库驱动类

3. 配置 SqlSessionFactory

在 Spring 配置文件中配置 SqlSessionFactory

<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

SqlSessionTemplateSqlSession 的实现,它会代理一个 SqlSession 的调用,将 SqlSession 的创建和关闭交给 Spring 管理。

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

在 Spring Boot 中,SqlSessionTemplate 也会被自动配置。

5. 配置 Mapper 接口

在 Spring 配置文件中配置 Mapper 接口:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

在 Spring Boot 中,可以使用 @MapperScan 注解来自动扫描和注册 Mapper 接口:

@SpringBootApplication
@MapperScan("com.example.mapper")
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

启动过程

当 Spring 应用启动时,它会根据配置文件或注解创建和初始化所有的 bean。对于 MyBatis 集成:

  1. Spring 容器启动。
  2. 数据源 DataSource 被创建并配置。
  3. SqlSessionFactory 被创建。Spring 调用 SqlSessionFactoryBean,它背后使用 SqlSessionFactoryBuilder 来构建 SqlSessionFactory
  4. SqlSessionTemplate 被创建,它将被用作 SqlSession 的代理。
  5. Mapper 接口被扫描并注册为 Spring bean,它们内部使用 SqlSessionTemplate
  6. 应用程序现在可以注入 Mapper 接口并使用它们来执行数据库操作。

通过这种方式,MyBatis 与 Spring 的集成使得数据库操作的事务管理和依赖注入更加简单和一致。

Spring 和 MyBatis 的结合为开发者提供了一个强大的数据访问框架,它结合了 Spring 的依赖注入和事务管理能力以及 MyBatis 的灵活性和对 SQL 的精细控制。通过这种集成,开发者可以利用 MyBatis 易于使用的映射和会话管理,同时享受 Spring 提供的声明式事务和简化的资源管理。Spring 通过其 IoC 容器自动配置和管理 MyBatis 的核心组件,如 SqlSessionFactory 和 SqlSession,并通过 MapperScannerConfigurer 或 @MapperScan 注解自动发现和注册 Mapper 接口。这种集成方式简化了配置过程,提高了开发效率,并有助于维护大型项目的清晰结构。

总的来说,Spring 和 MyBatis 的结合使得 Java 应用的数据库操作变得既简洁又强大,允许开发者专注于业务逻辑,同时确保了应用的可扩展性和可维护性。

转载自:https://juejin.cn/post/7363584550595657779
评论
请登录