javascript
SpringBoot Mybatis Starter 解析
1.Mybatis-starter模塊介紹
????????我們知道Mybatis有兩大核心組件:SqlSessionFactory和Mapper接口。該starter可以幫助我們自動完成SqlSessionFactory和Mapper的裝配與注入,可以極大的簡化我們的開發(fā)難度,提高開發(fā)效率。
Mybatis-starter主要完成以下功能:
2. Starter 自動裝配解析
????????從該模塊的pom文件可以看出,它里面引入了mybatis-spring-boot-autoconfigure依賴,由此我們可以知道在該依賴的META-INF目錄下的spring.factories中配置了EnableAutoConfiguration的實(shí)現(xiàn)類,總共有2個分別是:MybatisLanguageDriverAutoConfiguration和MybatisAutoConfiguration。MybatisLanguageDriverAutoConfiguration主要是mapper配合注解方式編寫sql語句,適用于簡單的sql,一般不加載。
MybatisAutoConfiguration裝配的條件是:
????????此外,在該配置類中注入了兩個Bean,分別是SqlSessionFactory,該類是單個數(shù)據(jù)庫經(jīng)過編譯之后內(nèi)存的鏡像,通過它可以于數(shù)據(jù)完成交互。另外一個是SqlSessionTemplate,該類封裝了SqlSessionFactory和SqlSession,里面還定義了數(shù)據(jù)庫操作方法,方便對數(shù)據(jù)進(jìn)行操作。操作數(shù)據(jù)的類是一個代理類,代理的核心邏輯在SqlSessionInterceptor類中。該代理方法也很簡單,首先獲取SqlSession,之后調(diào)用method invoke方法。SqlSession的獲取是以SqlSessionFactory為key去本地的ThreadLocal中獲取,如果不存在就創(chuàng)建一個。
3.Mapper類掃描
??在MybatisAutoConfiguration中有2個內(nèi)部類,分別是:MapperScannerRegistrarNotFoundConfiguration和AutoConfiguredMapperScannerRegistrar,MapperScannerRegistrarNotFoundConfiguration的主要作用是ImportAutoConfiguredMapperScannerRegistrar,在方法registerBeanDefinitions中注冊了MapperScannerConfigurer類,該類實(shí)現(xiàn)了BeanDefinitionRegistryPostProcessor接口,會在bean實(shí)例化之前調(diào)用postProcessBeanDefinitionRegistry方法
?
? ? ?在processBeanDefinitions方法中,將beanDefinition的class替換成了MapperFactoryBeanClass的clas,MapperFactoryBeanClass是實(shí)現(xiàn)了FactoryBean,它里面有個getObject方法(getSqlSession().getMapper(this.mapperInterface)),該方法返回一個mapper 的代理對象MapperProxy,每次調(diào)用mappe 的方法都會去調(diào)用該類的invoke方法,最終調(diào)用MapperMethod的invoke方法,之后在調(diào)用mapperMethod的execute方法中,然后根據(jù)sql類型完成操作。
????????當(dāng)我們查看@MapperScan注解時,發(fā)現(xiàn)它引入了MapperScannerRegistrar,該類實(shí)現(xiàn)了ImportBeanDefinitionRegistrar類,最終會調(diào)用RegisterBeanDefinitions方法,該方法與我們上面的解析流程一樣。在MybatisAutoConfiguration配置類中,如果要讓MapperScannerRegistrarNotFoundConfigurration配置生效,那么就需要不存在MapperScannerConfigurer的bean。因此該自動配置類與@MapperScan只能有一個生效,放置mapper重復(fù)掃描。
總結(jié)
以上是生活随笔為你收集整理的SpringBoot Mybatis Starter 解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ介绍(详细)
- 下一篇: SpringBoot如何自定义start