MyBatis-Starter的自动配置实现原理概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lichunericli/article/details/82562606

1. MyBatis-Spring-Boot-Starter概述【官方翻译】

官方文档:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/index.html。

使用MyBatis和Spring至少需要一个SqlSessionFactory和Mapper Interface,使用MyBatis-Spring-Boot-Starter将:

(1)自动检测到存在的DataSource;

(2)SqlSessionFactory实例通过DataSource创建并注册,由SqlSessionFactoryBean.getObject()来创建;

(3)通过SqlSessionFactory实例来创建并注册SqlSessionTemplate的实例;

(4)将自动扫描映射器,将它们链接到SqlSessionTemplate并将它们注册到Spring上下文,以便将它们注入到bean中。

默认情况下,MyBatis-Spring-Boot-Starter将搜索标有@Mapper注释的映射器,也可使用@MapperScan注释。如果在Spring的上下文中找到至少一个MapperFactoryBean,MyBatis-Spring-Boot-Starter将不会启动扫描过程,如果想要完全停止扫描则需要用@Bean方法显式注册相关的映射器。

2. Mybatis-Spring整合概述

(1)获取SqlSessionFactory和SqlSession,通过SqlSessionFactoryBean来获取和实现;

(2)Spring的bean与Mybatis的Mapper之间的映射,通过MapperFactoryBean与MapperScannerConfigurer来获取和实现。

从MyBatis的底层实现原理来分析,即通过配置文件中来获取SqlSessionFactory,通过SqlSessionFactory来获取SqlSession,接着通过SqlSession结合Mapper来执行底层的操作。因为Spring是管理Bean与Bean之间的关系的容器,故Mybatis-Spring的出现主要应该就是为了解决SqlSession的获取和Mapper的映射,都交由Spring来处理的问题。

3. Spring Boot的SPI机制
Spring Boot的SPI机制类似Java SPI的加载机制,也是Spring Boot Starter实现的基础。在META-INF/spring.factories文件中配置接口的实现类名称,然后在程序中读取这些配置文件并实例化。

4. Mybatis的自动配置概述
Spring Boot是通过@EnableAutoConfiguration来自动配置和加载可能需要的bean,在Mybatis-spring-boot-autoconfigure中可以看到MyBatis的Spring.factories中的Auto Configure是org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration,其内容如下所示:
@org.springframework.context.annotation.Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisAutoConfiguration{

}

总结:从MybatisAutoConfiguration的声明可以看出MyBatis-spring-boot-starter对MyBatis的自动化配置实现是基于DataSource和MybatisProperties的,故在实际应用中使用MyBatis-spring-boot-starter只需要设置DataSource和Properties属性即可。

猜你喜欢

转载自blog.csdn.net/lichunericli/article/details/82562606