mybatisplus源码解析(⼀)---基于springboot配置加载和
SqlSess。。。
⼀直想分析下框架的代码,之前也看过Spring等框架源码,但是看了似懂⾮懂的,这次要将分析的记录下,如果发现不理解可以再来重新看下这个记录,还是从简单mybatis-plus来分析下,为什么mybatis-plus?最近项⽬在使⽤这个。mybatis-plus在mybatis上做了⼀层扩展,详细了解请访问官⽹地址: 项⽬依赖⼯具是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>
spring ioc注解
<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的构造,初次写源码级别的分析,写得不好,如果发现理解上的错误,希望⼤家多指教,谢谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。