在之前的例子中,我们介绍了如何在Spring Boot 框架中添加数据源配置。这篇文章我们来详细介绍一下如何整合Mybatis框架。
整合Mybatis框架
还是按照之前的套路,我们要整合Mybatis框架,首先需要加载对应的场景启动器。这里我们引入由Mybatis提供的整合Spring Boot的场景启动器。
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency>
第二步,我们来研究一下对应的自动配置类MybatisAutoConfiguration,代码如下
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class })
public class MybatisAutoConfiguration implements InitializingBean {
这里通过自动配置类加载的配置类是MybatisProperties,它的配置前缀如下代码所示
@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
public class MybatisProperties {public static final String MYBATIS_PREFIX = "mybatis";
从代码中可以看出它是以mybatis开头的。也就是说我们在全局配置文件中需要通过mybatis开头的配置来对其进行属性绑定。在其配置类中有如下几个配置项需要我们注意。
/*** Location of MyBatis xml config file.*/// 配置 Mybatis.xml的加载路径private String configLocation;/*** Locations of MyBatis mapper files.*/// 配置Mapper文件映射路径private String[] mapperLocations;/*** Packages to search type aliases. (Package delimiters are ",; \t\n")*/// 实体类包的别名private String typeAliasesPackage;/*** The super class for filtering type alias. If this not specifies, the MyBatis deal as type alias all classes that* searched from typeAliasesPackage.*/private Class<?> typeAliasesSuperType;/*** Packages to search for type handlers. (Package delimiters are ",; \t\n")*/private String typeHandlersPackage;
这里需要注意的配置有如下几个,基本上我们其他的配置也少有用到。
# MyBatis配置
mybatis:# 搜索指定包别名typeAliasesPackage: com.ruoyi.**.domain# 配置mapper的扫描,找到所有的mapper.xml映射文件mapperLocations: classpath*:mapper/**/*Mapper.xml# 加载全局的配置文件configLocation: classpath:mybatis/mybatis-config.xml
在之前演示配置相关内容的时候我们也对其源码进行过分析,这里需要注意的一点就是如下的一段代码
@Bean@ConditionalOnMissingBeanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean factory = new SqlSessionFactoryBean();factory.setDataSource(dataSource);
我们会看到这里如果我们没有特殊去设置SqlSessionFactory配置的时候,会自动注入默认的Factory进行配置,但是在一般情况下,我们都需要自定义一个SqlSessionFactory。代码如下。
@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");String mapperLocations = env.getProperty("mybatis.mapperLocations");String configLocation = env.getProperty("mybatis.configLocation");typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);VFS.addImplClass(SpringBootVFS.class);final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);sessionFactory.setTypeAliasesPackage(typeAliasesPackage);sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));return sessionFactory.getObject();}
上面介绍了Mybatis的数据库的配置方式。结合之前讲解配置原理中引入的Mybatis相关配置源码信息,我们可以更好的理解Mybatis在配置中相关的配置内容