向一个springboot项目中整合mybatis很简单,一般只需要两步:
1.引入mybatis依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
2.在资源文件application.yml或propeties中定义好配置信息
网上的教程很多这里过程不赘述了...
打开刚刚引入的jar包 mybatis-spring-boot-starter,你会发现没什么东西,在spring.provides中发现这里指向了另一个jar:provides: mybatis-spring-boot-autoconfigure
打开 MybatisAutoConfiguration.class文件,在这里做了很多事情:
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisAutoConfiguration {
private static Log log = LogFactory.getLog(MybatisAutoConfiguration.class);
@Autowired
private MybatisProperties properties;
@Autowired(
required = false
)
。。。
第一:当SqlSessionFactory 和 SqlSessionFactoryBean 位于类路径上时,实例化这两个bean;
第二:当上下文中存在 DataSource对象时,实例化这个bean;
第三:在BeanDefinitions中创建 MybatisProperties对象;
第四:MybatisAutoConfiguration这个类放在 DataSourceAutoConfiguration之后加载。
首先分析DataSourceAutoConfiguration:
在这里他做的第一件事就是实例化 DataSource对象,然后从资源文件中拿到 spring.database 配置信息并初始化到DataSourceProperties对象。
随后调用 dataSourceInitializer 方法,将DataSource初始化。
这里不了解bean对象的实例化和初始化过程的可以参考:https://blog.csdn.net/qq_15037231/article/details/105938673
DataSourceAutoConfiguration 事情做完后开始加载 MybatisAutoConfiguration类,
初始化 SqlSessionFactory 会话工厂类,
初始化临时会话 SqlSessionTemplate。
扫描项目中@Mapper的文件为其创建bean并加入BeanDefinition
到此发现,数据库的配置信息和所有的持久层Mapper接口都在spring封装成了bean。
那么具体是怎么执行sql的呢?
待下回分解,先处理一波工作。。。