今天,我们来分析一下MyBatis的自动配置解析

mybatis的自动配置类不在springboot中,下面搜索不到

SpringBoot默认配置原理:MyBatis自动配置解析_配置文件

 

需要在pom中添加mybatis的场景启动器

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

 

左侧会增加如下内容:

SpringBoot默认配置原理:MyBatis自动配置解析_spring_02

 

MybatisAutoConfiguration这个类会被反射加载到程序中

SpringBoot默认配置原理:MyBatis自动配置解析_spring_03

 

下面:

  @Configuration,表示是一个通过注解标注的springBean

  @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})这个注解的意思是:当存在SqlSessionFactory.class, SqlSessionFactoryBean.class这两个类时才解析MybatisAutoConfiguration配置类,否则不解析这个配置类,因为,我们需要mybatis为我们返回会话对象,就必须有会话工厂相关类。 

SpringBoot默认配置原理:MyBatis自动配置解析_spring_04

 

下面@ConditionalOnMissingBean的含义是如果ioc容器中没有这个对象就创建,有就不执行,也就是不创建了 

SpringBoot默认配置原理:MyBatis自动配置解析_mysql_05

 

Spring-boot为我们提供了统一的starter可以直接配置好相关的类,触发自动配置所需的依赖(mybatis)

也就是可以保证sqlSessionFactory、sqlSessionTemplate、dataSource等mybatis所需的组件均可被自动配置

点击pom中mybatis的场景启动器:mybatis-spring-boot-starter

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

 

可以看到有如下依赖,导入了下面的依赖,上面条件判断,SqlSessionFactory和SqlSessionFactoryBean就肯定存在了

SpringBoot默认配置原理:MyBatis自动配置解析_mysql_06

因为maven依赖的传递性,我们只要依赖starter就可以依赖到所有需要自动配置的类,实现开箱即用的功能。 

配置文件中,点击mapper-locations 

SpringBoot默认配置原理:MyBatis自动配置解析_配置文件_07

 

可以看到调用的MybatisProperties中的set方法

SpringBoot默认配置原理:MyBatis自动配置解析_配置文件_08

 

配置文件中的配置和MybatisProperties中的对应

SpringBoot默认配置原理:MyBatis自动配置解析_配置文件_09

 

另外,也可以点击下面查看配置文件

SpringBoot默认配置原理:MyBatis自动配置解析_mysql_10

 


本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevOps/TestOps)、测开等