`
eric_weitm
  • 浏览: 235928 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mybatis-plus-3.0 通用crud实现原理

    博客分类:
  • java
 
阅读更多

mybatis-plus-3.0 通用crud实现原理

mapper创建流程(@MapperScan 具体实现细节)

1》factory创建之后回调各个BeanFactoryPostProcessor

2》ConfigurationClassPostProcessor#processConfigBeanDefinitions 处理@Configuration注解

3》 依次处理 application(@SpringBootConfiguration)、@ComponentScan(会处理所有注入的bean)

4》 处理各个Configuration

5》 处理各种 ImportSelector 和ImportBeanDefinitionRegistrar

6》 MapperScannerRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar)解析@MapperScan,并且把每一个接口的工厂类设置为org.mybatis.spring.mapper.MapperFactoryBean

 

7》 factory 创建各个bean、设置属性、回调InitializingBean(开始注入逻辑)

8》 org.mybatis.spring.mapper.MapperFactoryBean<T>(DaoSupport).afterPropertiesSet

9> com.baomidou.mybatisplus.core.MybatisConfiguration.addMapper plus接管了mapper的管理职责

10》 MybatisMapperAnnotationBuilder.parse plus 通用的crud的注入逻辑 

a: AbstractSqlInjector.inspectInject主逻辑:

获取方法列表 getMethodList 

依次调用 inject 即injectMappedStatement(生成mybatis的动态xml脚本,注入不同的statement)

 

b: parseStatement:解析注解里的sqlSource(自定义的基于注解的动态注入)

c: parsePendingMethods: 处理还没有解析完的method

 

总结(初始化的时候注入动态代理的接口): 创建bean + 注入通用crud

app-> componentScan-> configuration->ImportBeanDefinitionRegistrar

MapperScannerRegistrar -> afterPropertiesSet->MybatisMapperAnnotationBuilder.parse

 

plus hack的类有 MybatisConfiguration、MybatisMapperRegistry、核心逻辑是MybatisMapperAnnotationBuilder.parse

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics