java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring整合Mybatis

Spring整合Mybatis框架方法剖析

作者:王侦

这篇文章主要为大家介绍了Spring整合Mybatis框架方法剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Spring整合其他框架的核心思路

就是将其他框架生成的类放到Spring容器中。同理,Spring整合Mybatis也是让Mybatis生成的Mapper接口的代理对象作为Bean注册到Spring容器中。

解决的核心问题

ClassPathMapperScanner#registerFilters这里面添加一个总是返回true的TypeFilter:

    if (acceptAllInterfaces) {
      // default include filter that accepts all classes
      addIncludeFilter((metadataReader, metadataReaderFactory) -> true);
    }

关于Mapper接口生成对象

这条由mybatis-spring保证

1)FactoryBean,采用的就是这种方式,控制对象的生成过程,生成JDK动态代理对象

2)ac.getBeanFactory().registerSingleton(),也是一样麻烦

3)@Bean 方式,针对每一个接口都要一个@Bean,太麻烦

4)@Service 这样是把类交给Spring,然后创建对象,但是这里是接口,创建对象会报错,我们这里需要控制对象的生成过程(生成动态代理)

Mybatis-Spring 1.3.2版本底层源码执行流程

这里注意:SpringManagedTransaction是由SqlSessionFactoryBean引入的。

分析一下Mapper代理对象执行查询,比如userMapper.selectById(),其底层调用的是啥?

一级缓存失效问题:

Mybatis-Spring 2.0.6版本底层源码执行流程

核心区别:Mybatis-Spring 1.3.2在MapperScannerRegistrar#registerBeanDefinitions就会去扫描Mapper接口并生成BD注册到Sprign容器。而Mybatis-Spring 2.0.6在MapperScannerRegistrar#registerBeanDefinitions只是注册了一个新的BD:MapperScannerConfigurer,扫描逻辑放到了这个类中,因为这个类是一个BeanDefinitionRegistryPostProcessor。

invokeBeanFactoryPostProcessors()中整合Mybatis的地方

invokeBeanFactoryPostProcessors()执行流程:

以上就是Spring整合Mybatis框架源码剖析的详细内容,更多关于Spring整合Mybatis的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文