SqlSessionFactory是如何被初始化的?
在springboot项目中,我们并没有书写并注入SqlSessionFactory,此时就是通过springboot的自动装配特性,自动装配并注册bean到spring容器中。下面进入正文:
MybatisAutoConfiguration:
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
// 数据源
factory.setDataSource(dataSource);
factory.setVfs(SpringBootVFS.class);
if (StringUtils.hasText(this.properties.getConfigLocation())) {
// mybatis全局配置文件位置
factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
}
// 设置Configuration
this.applyConfiguration(factory);
if (this.properties.getConfigurationProperties() != null) {
factory.setConfigurationProperties(this.properties.getConfigurationProperties());
}
// 设置插件
if (!ObjectUtils.isEmpty(this.interceptors)) {
factory.setPlugins(this.interceptors);
}
// 设置数据库厂商标识
if (this.databaseIdProvider != null) {
factory.setDatabaseIdProvider(this.databaseIdProvider);
}
// 设置别名包
if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) {
factory.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
}
// 筛选类型别名的超类。如果没有指定,MyBatis会将从typeAliasesPackage中搜索的所有类作为类型别名处理。
if (this.properties.getTypeAliasesSuperType(