在之前的例子中,我们介绍了如何在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
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource);
我们会看到这里如果我们没有特殊去设置SqlSessionFactory配置的时候,会自动注入默认的Factory进行配置,但是在一般情况下,我们都需要自定义一个SqlSessionFactory。代码如下。
@Bean
public 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在配置中相关的配置内容