mybatis plus源码解析(一) ---基于springboot配置加载和SqlSessionFactory的构造

一直想分析下框架的代码,以前也看过Spring等框架源码,可是看了似懂非懂的,此次要将分析的记录下,若是发现不理解能够再来从新看下这个记录,仍是从简单mybatis-plus来分析下,为何mybatis-plus?最近项目在使用这个。mybatis-plus在mybatis上作了一层扩展,详细了解请访问官网地址:mybatis-plus 项目依赖工具是maven, 引入的项目依赖以下:java

<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.1.9</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatisplus-spring-boot-starter</artifactId>
        <version>1.0.5</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>
接下看一下spring boot加载的mybatis-plus的配置和
复制代码

上图能够看出mybatisplus-spring-boot-starter这个依赖中spring.factories文件中,spring boot的EnableAutoConfiguration加载的MybatisPlusAutoConfiguration这个类,若是不熟悉spring boot starter的使用的能够参考的 这里 接下来能够看下MybatisPlusAutoConfiguration里是若是初始化配置的。

从注解的角度看

  • @Configuration是将该类加入spring容器当中,
  • @ConditionalOnClass({SqlSessionFactory.class, MybatisSqlSessionFactoryBean.class})
  • SqlSessionFactory,MybatisSqlSessionFactoryBean类的的依赖存在。
  • @ConditionalOnBean(DataSource.class) DataSource这个实例必须存在
  • @EnableConfigurationProperties(MybatisPlusProperties.class) 加载配置到MybatisPlusProperties这个类中
  • @AutoConfigureAfter(DataSourceAutoConfiguration.class) 其余的类加载完以后,再加载DataSourceAutoConfiguration这个类,它主要是完成数据配置初始化。 接下来,看一下 SqlSessionFactory的构造,

@ConditionalOnMissingBean是在Spring容器中缺乏bean的时候,建立SqlSessionFactory这个对象,前面已经建立了DataSource这个对象,这个实例在 这个方法中会自动注入进来,这是Spring的IOC来完成的, 这个类中,会建立一个MybatisSqlSessionFactoryBean的实例,它是实现Spring中FactoryBean接口的类,而后在这个实例中设置DataSource,VFS,ConfigLocation,MybatisConfiguraition(它是继承与Mybatis的Configuration)等属性mysql

SqlSessionFactory的建立的下半部分,能够看出,都是给MybatisSqlSessionFactoryBean设置各类属性,最后一句是最重要的是,调用MybatisSqlSessionFactoryBean的getObject()的方法.

能够看到getObject获取SqlSessionFacoty,会调用afterPropertiesSet()


afterPropertiesSet紧接着会调用 buildSqlSessionFactory()方法
。 能够从图上看出,若是是在configLocation的路径存在,则加载自定义的batisConfigBuilder对象,采用springboot的配置加载,因此这里configcation不存在的,因此只会走第一个分支,将配置属性都设置到configurion这个对象中。

那么接下来的一段代码就是为扫描配置的实体的路径,以及注册别名了,
这注意一下,若是mybatis中想为实体定义别名,则能够在实体上加上@Alias("xx")注解来标注,若是不加,则默认是英文全小写来标识别名。

接下来就是注册插件和类型转化处理了。

接下来是设置事务管理器,这里能够看到默认是用SpringManageTransactionFactory,而后设置全局配置,以及利SqlSessionFactoryBuilder传入configuration建立一个DefaultSqlSessionFactory对象,它建立的DefaultSqlSession再注入到SqlSessionTemplate对象中,SqlSessionTemplate才是真正与数据库交互的类,

接下最重要的是扫描加载mapper映射的xml,解析的工做是由XMLMapperBuilder的parse()方法完成的.具体即系,你们感兴趣能够本身去看下。不过回去介绍它是怎么使用注解写sql的,毕竟如今注解比较流行点吧,可是在凭借sql方面仍是要弱于xml的,

到了这里,彷佛忘了,mapper的扫描和注册到configuration的过程,因为建立SqlSessionFactory的过程太长,因此仍是留在下一篇介绍吧。

总结: 今天主要介绍了基于springboot加载mybatis-plus的配置和SqlsessionFactory的构造,初次写源码级别的分析,写得很差,若是发现理解上的错误,但愿你们多指教,谢谢!spring

相关文章
相关标签/搜索