Spring与Mybatis集成的相关实现类流程

一直很喜欢Myabtis功能与Spring集成的非常不错,对开发效率有很大的提高。之前一直很想了解Mabatis的相关流程思路,与Spring是如何去集成的。

下面我们来看一下很多关键的类的相关流程:

Spring与Myabtis集合的流程图

注意上图是发生在Spring初始化容器的BeanDefinition阶段

Spring相关

  1. ImportBeanDefinitionRegistrar : 根据该改名字就能猜到大概,就是导入并注册BeanDifination,这里一般是用于自定义的类,Mybatis的Mapper就是很好的例子,它所有的接口实现都是同一个类。
  2. ClassPathMapperScanner : 用于扫描特定的包下面的类,扫描完成之后,将每个类封装成BeanDifination对象,并注册到IOC容器中。mybatis的做法是将BeanDefinition的具体实现类指定成了MapperFactoryBean,也就是说在调用该包下的接口类的时候,它的唯一实现都是MapperFactoryBean
  3. MapperFactoryBean : mapper的工厂类,所有mybatis相关的mapper类的获取都是从该工厂获得;它持有了SqlSession对象,就相当于持有了Myabtis的所有功能。

Myabtis相关

  1. Configuration : 配置类对象,包括了Mapper.xml和mybatis-config.xml的解析。
  2. Executor : 具体的SQL执行层,所有的SQL都是由该类去执行。

其实有了这两个类就已经具有SQL执行相关的功能了,而这两个类都是由SqlSession持有。

有了上面相关的类执行流程就很清晰了,Myabtis与Spring相关的连接就是MapperFactoryBean,Spring负责将Myabtis的Mapper加载成一个BeanDifination对象,通过修改BeanDefinition对象的实现类的属性完成关联,后续实例化的时候,Spring会根据BeanDefinition对象进行构建实例化等。

Mapper和配置文件对象关联的话就更简单了,我们知道Mapper.xml会有一个mapper属性会和Mapper的接口类名对应上,SqlSession持有了Configruration,解析完了所有Mapper.xml之后会有一个存储关联,当调用指定的Mapper类,会从配置文件里面找关联,找到了之后再确定方法,确定完方法就能定位到要执行的SQL。

另外如果是注解定义的SQL的话,通常都是把解析Mapper配置文件的步骤改成解析Mapper接口的类,去定位注解里面的内容,实现的话也是大同小异。

Spring中还有很多相关的拓展类,类似Myabtis相关的功能中还有SpringCloud中的Feign思路也差不多是如此。

欢迎讨论交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值