MP 启动注入 SQL 原理分析

MP 启动注入 SQL 原理分析

文章目录

  • 一、MybatisPlus需要sql语句吗?
    • 解答:需要
      • 1.1. 问题:为什么MybatisPlus看不到sql语句?
      • 1.2. 分析:继承关系
      • 1.3. 假设:操作数据库一定有sql
  • 二、通过现象看本质
    • 2.1. 测试案例
    • 2.2. debug调试运行
    • 2.2.1. employeeMapper的本质
    • 2.2.2. MapperProxy中的对象
    • 2.2.3. sqlSessionFactory中的对象
    • 2.2.4. configuration对象
    • 2.2.5. 方法对应关系
    • 2.2.6. MP在启动的时候
    • 2.2.7. 当我们调用方法的时候
  • 三、源码分析:
    • 3.1. 根据方法找到类
    • 3.2 断点调试
    • 3.3. 接着调用addDeleteMappedStatement
    • 3.4. 调用injectDeleteByIdSql
    • 3.5. sqlSource拼接完成
    • 3.5. sqlSource拼接完成,继续调用删除方法

一、MybatisPlus需要sql语句吗?

解答:需要

1.1. 问题:为什么MybatisPlus看不到sql语句?

1.2. 分析:继承关系

  • xxxMapper继承了BaseMapper,BaseMapper提供了通用的CRUD方法,

1.3. 假设:操作数据库一定有sql

  • 方法来源于BaseMapper,有方法就必须有SQL,因为Mybatis最终还是需要通过SQL语句里操作数据库。

二、通过现象看本质

2.1. 测试案例

@Testpublic void testCommonSelect() {//1. 根据主键ID查询Integer idPK = 1;Employee employee = employeeMapper.selectById(idPK);System.out.println(employee);}

2.2. debug调试运行

employeeMapper就是一个接口,但是我们拿到的对象是一个代理对象,这个JDK动态代理

2.2.1. employeeMapper的本质

  • 就是org.apache.ibatis.binding.MapperProxy@4362d7df

2.2.2. MapperProxy中的对象

  • MapperProxy中sqlSeaaion有一个sqlSessionFactory
    在这里插入图片描述

2.2.3. sqlSessionFactory中的对象

  • 在sqlSessionFactory中有一个重要的对象configuration
    在这里插入图片描述

2.2.4. configuration对象

  • 这个对象是mybatis的全局配置对象,它包含了所有的配置信息。
  • 在configuration里面有一个mappendStatements对象,它里面每一个都是一个mappendStatement
    在这里插入图片描述
    其实,每一个都是一个mapperdStatement都表示Mapper接口的一个方法与Mapper映射文件中的一个sql语句。

2.2.5. 方法对应关系

  • 在BaseMapper定义的每一个方法,都会有一条sql语句与之对应mapperdStatement。

2.2.6. MP在启动的时候

  • 就会分析已经把我们BaseMapper里面的每一个方法,,将来索要执行的sql语句,都帮我们构造好了,并且都帮我们都保存到了configuraion里面的MappedStatements中的MappedStatement了。

2.2.7. 当我们调用方法的时候

  • 它就会回到configuration里面找到我们的MappedStatements,然后根据调用方法的名字,再去找到对应的sql语句,在其执行。
    在这里插入图片描述
    本质
    在控制台,在实例化employeeMapper这个bean的时候,都调用了addMappedStatement这个方法,来添加一个addMappedStatement,而每一个addMappedStatement对应着mapper文件中的每一个方法
DEBUG 07-13 18:57:00,780 Autowiring by type from bean name 'employeeMapper' via property 'sqlSessionFactory' to bean named 'sqlSessionFactoryBean'  (AbstractAutowireCapableBeanFactory.java:1349) 

在这里插入图片描述

三、源码分析:

3.1. 根据方法找到类

根据addMappedStatement,找到此方法的类AutoSqlInjector SQL 自动注入器,

这个java文件
在这里插入图片描述
这个.class文件
在这里插入图片描述

3.2 断点调试

  • 在.class文件中的addMappedStatement方法上打断点,dubug运行,当F8走到此方时,参数包括sqlSource 等都是前面传过来的,因此,我们需要往前推
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.3. 接着调用addDeleteMappedStatement

在这里插入图片描述

3.4. 调用injectDeleteByIdSql

在这里插入图片描述

3.5. sqlSource拼接完成

在这里插入图片描述

3.5. sqlSource拼接完成,继续调用删除方法

  • 接下来就去调用addDeleteMappedStatement进行具体操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟化精华问答 | 为什么云计算需要虚拟化?

虚拟化是一种资源管理技术, 是将计算机的各种物理资源, 如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破物理设备结构间的不可切割的障碍,使用户可以比原本的架构更好的方式来应用这些资源。这些资源的虚拟部分是不受现有资源的…

c++ raiseexception产生异常_Day17_异常,线程

《Java自学180天笔记》异常分类package demo3;/*java.lang.Throwable:类是Java语言中所有错误或异常的超类。 Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeException:运行期异常,java程序运行过程中出现的问题…

05_SpringCloud整合声明式HTTP客户端-Feign

SpringCloud整合声明式HTTP客户端-Feign 文章目录一、Feign介绍1. 什么是Feign?2. Feign组件:二、基于Feign实现微服务远程调用2.1. 引入feign依赖2.2. 启动类加EnableFeignClients注解2.3. 添加属性配置(暂无)2.4. 创建一个feign接口类2.5. 修改Ribbon调…

Jonathan Bryce说:OpenStack属于全世界,并不属于一个公司,也不会属于一个国家……...

戳蓝字“CSDN云计算”关注我们哦!“openstack这个软件是属于全世界的,并不属于一个公司,也不会属于一个国家。”这是OpenStack基金会创始人兼执行总监 Jonathan Bryce在访谈中一再强调的,也是让阿晶到如今依然记忆犹新的一句话。在…

html中给div设置的属性怎么样才能拿得到_前端基础高频面试题(更新中)

页面渲染的全过程输入url后,先拿到html文件,html下载完以后会开始对它进行解析html在解析的过程中,如果文本里有外部资源链接,比如css、js和img时,会立即启用其他线程下载这些静态资源。特殊的是当遇到js文件的时候&am…

怎么去除idea中代码的波浪线(黄色警告线)

windows中安装的idea中找到Preferences然后执行以下操作: 2.mac系统下的idea:为了减少一定量的重复代码,提醒开发人员注意,但是如果有时几行代码的重复没必要扔到一个统一的地方处理,这是总是提醒,干扰视线。这里根据个人习惯&am…

打脸!IEEE突然宣布解除对华为编辑和同行评审活动的限制;AWS 发生故障,因多处光缆被挖断,历经11小时完全修复……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 消失的台北电脑展&#xff0…

分布式mysql proxy_mysqlda: 基于核心业务对象切分的Proxy模式的分布式MySQL数据库中间件...

mysqlda - MySQL数据库中间件1. 概述1.1. 数据分布式切分方式分布式架构中最难解决的是数据分布式问题,大部分数据库中间件都以分库分表作为切分方式,好处是通用,但也存在以下问题:扩容过程需要以切片为单位在库间移动数据。扩容规…

企业级实战01_ActiveMQ 下载、安装、运行、实战需求

ActiveMQ 下载、安装、运行、实战需求 文章目录一、ActiveMQ简介1. 什么是ActiveMQ?2. ActiveMQ能干什么?3. ActiveMQ特点4. MOM基本功能5. MOM主要特点6. MOM的应用场景_前7. MOM的应用场景_后二、ActiveMQ下载/安装2.1 ActiveMQ下载2.2 ActiveMQ安装环…

刚出炉!AI指数报告:AI人才需求暴涨35倍,薪酬问鼎No.1

2017年~2018年,是人工智能大火的时候。你会发现,跟朋友聊天不谈人工智能,聊天的bigger都上不去。国家支持的朝阳行业,顶级高薪吸引,让甚至许多不是计算机出身的小白,都按捺不住,投身“学海”。而…

企业实战01_Linux下安装ActiveMQ并设置开机启动

文章目录一、MQ常用命令二、防火墙常用命令三、MQ安装3.1. 在root权限下操作,赋予目录权限3.2. 给运行程序赋予可执行权限3.3. 配置环境变量四、MQ添加开机启动4.1. 添加开机启动至初始化目录4.2. 添加MQ内容如下4.3. 将activemq添加至配置文件4.4. 查看服务是否添加…

SDN精华问答 | 使用SDN的一个例子

SDN火热了好一阵子,无论运营商、政府企业、投资机构,一段时间,不知道SDN、不能甩几个SDN相关的名词术语,似乎都落后于时代了。今天,就来看看关于SDN的精华问答吧。1Q:为什么会出现SDN呢? A&…

企业级实战02_SpringMVC整合ActiveMQ 实战需求

SpringMVC整合ActiveMQ 文章目录一、Spring整合ActiveMQ实战1.1. 创建一个父工程:1.2. 引入依赖1.3. 创建一个子项目生产者1.4. 创建一个spring配置文件4. 创建一个点对点的生产者监听5. 创建一个topic的生产者监听四、Spring整合ActiveMQ实战1. 创建一个消费者工程…

苹果WWDC前瞻之iOS 13更新最受关注;微软发布基于区块链的去中心化身份识别系统;小米成立了新集团质量办公室……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go SpaceX猎鹰9号火箭发射&…

企业级实战03_真实项目实战SpringMVC整合ActiveMQ

创建2个工程&#xff0c;生产者和消费者 测试点对点和广播发送常见类型的消息例如&#xff1a;文本(String)、对象(Object) 文本转Long String text “123”; Long.parseLong(text) 数组转集合 Arrays.toArray(list) 引入依赖 <?xml version"1.0" enco…

新一代私有云来了!看透基于开源生态的产品化

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | 易捷行云&#xff08;EasyStack&#xff09;创始人 陈喜伦来源 | 开源云中文社区进入云计算大时代&#xff0c;中大客户和产业互联网化是云计算的主战场&#xff0c;获取企业级客户是主旋律。对企业级客户来说以新一代私有云为…

mysql 用户管理表_mysql用户管理

msyql用户定义&#xff1a;使用某个用户 从哪个(些)地址访问我的数据库主机范围单独IP&#xff1a;10.0.0.200一个网段:10.0.0.% --->10.0.0.1-->10.0.0.254一个地址范围&#xff1a;10.0.0.5% ---->50-59用户的功能&#xff1a;1、用来登录mysql数据库2、用来管理数据…

8月有望推出5G套餐,资费或低于4G价格;为专利技术,华为5000万美元收购技术公司;AMD和三星宣布合作……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 宝宝树孕育APP新增即时交互功…

从数组随机抽取5个不重复_Power Query 如何保证随机抽取元素不重复

继续昨天的话题&#xff0c;昨天我们实现完全的随抽取列表元素&#xff0c;有一个问题就是可能几次会抽取同一个位置的元素&#xff1a;1-50中随机抽取5个数值&#xff0c;点击刷新&#xff0c;就会出现不同的结果&#xff0c;如上图可能会出现两个相同的数值&#xff0c;如何确…

vba上传指定文件ftp服务器

文章目录一、需求分析&#xff1a;二、操作流程&#xff1a;2.1 【开发工具】-【宏】2.2 【宏】-【编辑】2.3 【把脚本复制进去】2.4 脚本如下2.5 修改位置2.5.1 修改sheet名称和表格一致2.5.2 修改Cells(2,3)2.5.3 修改4 to 1002.5.4 修改Cells(i,3)2.5.5 修改发ftp信息2.5.6 …