js css htmlMybatis

Spring整合Mybatis源码剖析

2023-01-03  本文已影响0人  王侦

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接口生成对象:

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

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

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

一级缓存失效问题:

2.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。

3.invokeBeanFactoryPostProcessors()中整合Mybatis的地方

invokeBeanFactoryPostProcessors()执行流程:

上一篇 下一篇

猜你喜欢

热点阅读