从源码层面解释:为什么执行MyBatis接口就可以执行SQL?

本文深入探讨了在SpringBoot+MyBatis环境下,如何仅通过编写接口就能执行对应SQL的原理。从@MapperScan注解开始,解释了Spring如何通过@Import导入MapperScannerRegistrar,进而扫描并管理Mapper接口,生成BeanDefinition。接着,分析了BeanDefinition的变化,以及Mapper接口在Spring初始化过程中被动态代理为MapperProxy,最后详细阐述了MyBatis如何根据接口方法名匹配XML中的SQL语句来执行操作。
摘要由CSDN通过智能技术生成

编辑切换为居中

添加图片注释,不超过 140 字(可选)

1:场景分析

在我们使用SpringBoot+MyBatis的时候,我们一般是先引入依赖,然后配置

 
 

mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.coco.pojo 复制代码

当然还要在启动类上加上一个注解

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这时候,就可以编写一个接口,然后调用这个方法就可以执行配置文件中对应的SQL语句了

编辑切换为居中

添加图片注释,不超过 140 字(可选)

那么底层原理到底是怎么实现的呢??

2:万事开头难

分析一个框架源码的时候最难的就是不知道该从哪开始,我是这样想的,既然我们只要写一个这样的接口,那么就可以调用对应的SQL语句,那么肯定是在哪个环节对这个接口做一些特殊的处理

我们在启动类上加了一个注解,而且注解中的包路径正是我们接口的路径,这时候我们就有点眉目了。

进入 @MapperScan("com.coco.mapper") 这个注解中

编辑切换为居中

添加图片注释,不超过 140 字(可选)

我们看到除了注解的基本三个注解之外,还有一个注解就是 @Import({ MapperScannerRegistrar.class}) ,很多小伙伴可能不知道这个注解有什么用,我们先解释一下

3: SpringBoot中@Import注解的作用

在SpringBoot中当我们要声明一个Bean的时候,我们可以在该类上加上 @Service,@Compont 等,或者是在配置类中加上 @Bean 这个注解,除此之外还有一种方法,就是 @Import

@Import注解中会标明一个类,而且在SpringBoot启动的时候会处理也就是会实例化这个Bean,也就是会对这个Bean做一些处理

4: MapperScannerRegistrar.class的作用

即然知道

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值