通过引入mybatis-spring-boot-starter依赖,可以简单配置mybatis上手使用。下面简单分析mybatis-starter的源码以及如何配置mybatis。 先看mybatis-spring-boot-starter中mybatis-spring-boot-autoconfigure的spring.factories文件。
- # Auto Configure
- org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
可以看到自动注入类是MybatisAutoConfiguration,我们从这个类入手分析可以知道,必须先创建好了数据源后,才会加载MyBatis的sqlSessionFactory。
@EnableConfigurationProperties({MybatisProperties.class})注解指定了配置文件中 prefix = "mybatis" 那部分属性有效,这部分属性值将注入到已创建的SqlSessionFactoryBean中,最后生成SqlSessionFactory对象。
- @Configuration
- //当SqlSessionFactory,SqlSessionFactoryBean存在的情况下加载当前Bean
- @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
- //当指定数据源在容器中只有一个或者有多个但是只指定首选数据源
- @ConditionalOnSingleCandidate(DataSource.class)
- @EnableConfigurationProperties({MybatisProperties.class})
- //当数据源注入到Spring容器后才开始加载当前Bean
- @AutoConfigureAfter({DataSourceAutoConfiguration.class})
- public class MybatisAutoConfiguration implements InitializingBean {
- private final MybatisProperties properties;
- @Bean
- @ConditionalOnMissingBean
- public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
- SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
- factory.setDataSource(dataSource);
- factory.setVfs(SpringBootVFS.class);
- //设置mybatis配置文件所在路径
- if (StringUtils.hasText(this.properties.getConfigLocation())) {
- factory.setConfigLocation(this.resourceLoader.getResource
- (this.properties.getConfigLocation())); }
- }
- //设置其他MyBatisProperties对象中有的属性略....
- return factory.getObject();
- }
- }
(编辑:ASP站长网)
|