欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-15 11:13:56
...

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

 <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)等属性

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的构造,初次写源码级别的分析,写得不好,如果发现理解上的错误,希望大家多指教,谢谢!