MyBatis-SQL-语句执行流程

news2024/9/20 8:06:49

已查询为例

在这里插入图片描述

首先我们可以看到,在查询的时候Mapper对象已经是被代理过后的:
在这里插入图片描述
所以会执行invoke方法,其底层实现就是JDK的动态代理:
在这里插入图片描述
如下图所示,如果MethodCache里面存在方法,则判断这个方法是否为default方法,如果不是默认,会被当前的Mapper继承,如果是default方法则创建PlainMethodInvoker对象进行执行。
在这里插入图片描述
接着就是去执行这个方法了:
在这里插入图片描述
在execute方法里面判断当前DDL属于什么类型:
在这里插入图片描述
根据查询返回值不同又对应着不同的处理:
在这里插入图片描述
以查询列为例子会转到SqlSesson,这里真正的类名是SqlSessionTemplate,它也实现了SqlSesson接口。
在这里插入图片描述
SqlSessionTemplate去执行查询又走了代理:

在这里插入图片描述
通过下面这个拦截器进行拦截,在这里创建了SqlSession:
在这里插入图片描述
这个时候就会走到DefaultSqlSession来进行查询:
在这里插入图片描述
然而这里还不是真正运行查询的时候,它又会通过executor的query方法进行查询,这里有两个Executor,一个是缓存的一个是基础的Executor:
在这里插入图片描述
我们可以看到默认就是CachingExecutor,这是因为默认开启了二级缓存。我们可以看到查询以后就被缓存了,这里的缓存是可以配置的有两种方式

public enum LocalCacheScope {
  SESSION, STATEMENT
}

在这里插入图片描述
注解 这里有疑问mybatais-plus默认开启二级缓存(不同session共享)?确实是的,我看个配置默认是true,而官网说true是开启二级缓存,可能不太一样。
在这里插入图片描述
在这里插入图片描述

那么查询的时候怎么查询缓存呢?可以看到如果statement存在缓存则走缓存:
在这里插入图片描述

如果是一级缓存:
在这里插入图片描述
另外清空缓存的情况delete也是调用的update:
在这里插入图片描述
当事务回滚的时候也会清除缓存:
在这里插入图片描述

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

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

相关文章

STM32:TIM中断配置应用(1)呼吸灯:库函数讲解笔记+代码讲解笔记

声明:本博客为哔哩哔哩up主江协科技 “STM32入门教程”的听课笔记,仅供学习、参考使用,不得用作其他用途,违者必究。如有版权问题,请联系作者修改。 目录 一、综述 二、TIM库(有关输出比较的函数&#x…

【如何下载Landsat数据】

下载Landsat数据可以通过多种途径实现,主要包括使用官方网站、第三方平台和专门的软件库等。以下是一些常用的方法: 1. 使用USGS官方网站 EarthExplorer(earthexplorer.usgs.gov) 注册账号:首先,需要在…

10-python格式化字符串的四种方法(%,format,f-string,string template)

3 f-string (格式化字符串) in Python 自 Python 3.6 引入以来,f-string 提供了一种更加简洁和直观的方式来进行字符串格式化。其语法简单明了:只需在字符串前加上字母 f 或 F,并在字符串中使用 {} 来包裹需要插入的内容。 它相比于之前的%格式化和字符串format方法写起来更…

【R语言】基于Biomod2集成平台探究物种分布区的构建流程(SDMs)(持续更新中。。。。。。)

Species Distribution Models 1.写在前面2.物种分布模型介绍3.输入数据准备及预处理3.1.如何从GBIF网站上获取分布点数据(基于rgbif包)3.2.分布点稀疏处理(基于spThin函数)3.3.如何获取环境变量数据(基于getData函数&a…

兴业月报|八月法拍房市场套均成交折扣降至6.9折

导读 8月北京法拍房成交房源233套,成交总金额18.2891亿元,套均成交价784.94万元,总参拍人数890人,套均参拍人数3.81人,套均成交折扣6.9折。 ——兴业数据中心 2024年八月北京法拍房市场详细数据报告 2024.03-2024.0…

计算机网络 第1章 概述

文章目录 计算机网络概念计算机网络的组成计算机网络的功能三种数据交换技术电路交换(Circuit Switching)报文交换(message)分组交换 三种交换方式性能对比计算机网络的分类计算机网络的性能指标性能指标1:速率性能指标…

【mysql】mysql查询机制 调优不止是索引调优

前言:说到mysql调优 我们第一反应都是想到索引调优 应该这是最基本的 也是至关重要的;一般工作个两年 索引调优都可以掌握的八九不离十,相关数据结构特点也都能说个一二出来,所以本文重点是讲述其它机制 整体架构 连接器&#xff…

【C++】手动实现String类的封装(分文件编译)

实现了String类的大部分封装&#xff0c;采用分文件编译 //mystring.h #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring> using namespace std;class myString { private:char *str; //定义一个字符串int size; //记录字符串…

比亚迪方程豹携手华为乾崑智驾,加速中国智驾技术向前

近日&#xff0c;比亚迪方程豹与华为乾崑智驾在深圳签署合作协议&#xff0c;中国两大科技巨头强强联合&#xff0c;共同合作开发全球首个硬派专属智能驾驶方案&#xff0c;实现整车智驾深度融合&#xff0c;首发搭载在即将上市的方程豹豹8车型。 比亚迪智驾以自主研发和开放合…

MySQL之数据库基础

目录 一、数据库 1、基本概念 2、常见的数据库 3、MySQL数据库 连接MySQL服务器 数据逻辑存储 二、数据库和表的本质 三、SQL语句 四、服务器&#xff0c;数据库&#xff0c;表的关系 五、存储引擎 查看存储引擎 一、数据库 1、基本概念 一般来说&#xff0c;数据库…

【软件技巧】第33课,软件逆向安全工程师之如何快速的跑到某行代码EIP设置,每天5分钟学习逆向吧!

鼠标右键在此设置EIP EIP&#xff08;Extended Instruction Pointer&#xff09;是x86架构中一个重要的寄存器&#xff0c;它用于存储当前正在执行的指令的地址。EIP是程序计数器&#xff08;Program Counter&#xff09;的扩展版本&#xff0c;因为它是32位寄存器&#xff0c…

Centos安装node_exporter

使用以下命令下载最新版本的node_exporter, 地址: https://github.com/prometheus/node_exporter/releasesorter/releases&#xff1a; wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz或本地下载上传到服…

python 字典怎么提取value

打开编辑器&#xff0c;写上注释内容。 新建一个函数getvalue。 新建一个字典。 zidian{"country1":"america","country2":"australia","country3":"germany"} 利用values这个方法来获取字典中的所有Vlue值&…

浅析synchronized锁升级的原理与实现 1

目录 背景 锁的用法 底层实现 原理分析 锁的状态 锁升级 锁升级过程 锁升级简要步骤 锁升级细化流程 背景 在多线程编程中&#xff0c;线程同步是一个关键的概念&#xff0c;它确保了多个线程对共享资源的安全访问。Java中的synchronized关键字是一种常用的线程同步机制…

数据安全与个人信息保护的辨析

文章目录 前言一、合规1、合规的目标导向原则2、监管平衡的原则二、基础设施1、公共基础设施2、企业基础设施三、数据流通1、数据生产要素是数字化时代生产要素的变革理论2、数据产品的保护源自于数据产品的价值四、产品与服务1、数据安全与网络安全2、数据安全的分类分级与数据…

Qt-信号与槽

1. 认识信号和槽 Qt中&#xff0c;谈到信号&#xff0c;涉及到三个要素. 信号源&#xff1a;由哪个控件发出的信号信号的类型&#xff1a;用户进行不同的操作&#xff0c;就可能出发不同的信号 点击按钮&#xff0c;触发点击信号 在输入框中移动光标&#xff0c;触发移动光标的…

github私有仓库通过action部署hexo到公开仓库

github私有仓库通过action部署hexo到公开仓库 有一段时间一直将博客md文件直接放到公开仓库然后通过工作流action创建一个gh-page分支&#xff0c;来实现部署 但是这样做有一个问题&#xff0c;如果你的源文件&#xff0c;或者配置文件中有涉及变量&#xff0c;或者密钥key&a…

STM32G474之TIM1输出PWM互补信号(无死区时间和BKIN输入)

STM32G474之TIM1输出PWM互补信号&#xff0c;无死区时间&#xff0c;无BKIN输入。定时器1是16向上计数器&#xff0c;16向下计数器&#xff0c;16向上/向下计数器&#xff0c;输入时钟分频值&#xff1a;“1至65536”中的任意整数&#xff1b;捕获输入通道4个&#xff0c;比较输…

【C++ Primer Plus习题】9.4

问题: 解答: main.cpp #include <iostream> #include "sales.h" using namespace std; using namespace SALES;int main() {Sales s1, s2;double de[QUARTERS] { 12.1,32.1,42.1,51.1 };setSales(s1, de, QUARTERS);showSales(s1);cout << endl;setSal…

AI图片扩展工具 | 一名非技术人员依靠AI就能写出来

前言 我本职是一个技术支持&#xff0c;原本和开发搭不到边。但这两年 AI 发展迅猛&#xff0c;让我这样的半吊子也能借助 AI 的力量写网站。 因为这两年压力大&#xff0c;所以琢磨着出海看看能不能挣到钱&#xff0c;所以在学习做网站。 这个站是我的第 5 个作品了。前面 …