Mybatis 原理分析(SpringBoot)

本文详细分析了Mybatis在SpringBoot中的工作原理,包括如何向Spring容器注入Mapper接口的代理对象,以及代理对象执行SQL的流程。从MapperScannerRegistrar注册Mapper接口,到MapperFactoryBean创建代理对象,再到MybatisMapperProxy的执行过程,揭示了Mybatis与Spring的深度融合以及线程安全的实现机制。
摘要由CSDN通过智能技术生成

前言

在学习之前需要复习以下知识:

  • 动态代理
  • JDBC操作
  • 了解Spring容器的创建流程

一、向Spring容器中注入Mapper接口代理对象

1.注册MapperScannerConfigurer组件的 BeanDefinition ,并在void registerBeanDefinitions 方法中为MapperScannerConfigurer组件设置@MapperSacn注解中所配置的属性信息;

MapperScannerRegistrar.java
在这里插入图片描述

2.MapperScannerConfigurer组件实现了BeanDefinitionRegistryPostProcessor (spring扩展接口),public void postProcessBeanDefinitionRegistry()方法 - 用于加载用户的自定义配置(一般可以在配置文件中配置多数据源的sqlSessionFactory)以及它会查找类路径下的映射器并自动将它们创建成 MapperFactoryBean(MapperFactoryBean 会将Mapper接口代理对象注入到Spring容器中)。

MapperScannerConfigurer.java
在这里插入图片描述
在上面的后置处理器方法中创建了ClassPathMapperScanner对象,并调用了scanner.scan()方法对指定映射包下的Mapper接口进行扫描。

3.ClassPathMapperScanner重写了父类的doScan()方法,调用父类ClassPathBeanDefinitionScannerdoScan()方法获取到指定包下的所有 Mapper接口的BeanDefinition并返回,并且注册了Mapper接口的BeanDefinition。

ClassPathBeanDefinitionScanner.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值