MyBatis-SQL-语句执行流程

news/2024/9/15 1:08:13/ 标签: mybatis, sql, spring

已查询为例

在这里插入图片描述

首先我们可以看到,在查询的时候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.ppmy.cn/news/1519808.html

相关文章

python实现人工神经网络

要编写一个简单的人工神经网络(ANN)程序,可以从一个基本的前馈神经网络开始,该网络通常包括输入层、一个或多个隐藏层以及输出层。在这个例子中,将使用Python的NumPy库来处理数学运算,并使用Sigmoid函数作为…

【Python批量下载Landsat数据】

批量下载Landsat数据(例如Landsat 8 OLI/TIRS)可以通过多种方法实现,但通常涉及使用在线服务或API接口,如USGS EarthExplorer、Google Earth Engine(GEE)或者专门的库如landsatxplore(一个Pytho…

配置了680M和780M集显的AMD CPU列表

AMD Radeon 680M 核显配置在以下型号的 CPU 上面: - Ryzen 9 6980HX:8 核心 16 线程,最高加速时钟频率可达 5.0GHz,配备 12CU RDNA 2 架构的 Radeon 680M 核显,频率为 2.4GHz 。 - Ryzen 9 6900HX:8 核心 …

MAC环境导出项目的目录结构

一、安装Homebrew包管理工具 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)" 官网网址:https://brew.idayer.com/ 二、用brew包管理工具安装tree brew install tree 三、打开终端,导出项目…

深入Redis:细谈持久化

Redis的数据是保存在内存中的,内存里面的数据是不持久的,要想做到持久化,必须要把在内存中的数据储存到硬盘上。 Redis速度非常快,数据只有在内存中才有这样的速度,但是为了持久,数据还是要想办法保存到硬…

Java Excel转PDF(免费)

目前市面上 Excel 转 PDF 的组件较多: 收费:aspose、GcExcel、spire开源:jacob、itextpdf 其中收费的组件封装得比较好,代码简洁,转换的效果也很好,但收费也高得离谱: 为了成本考虑&#xff…

videojs宫格视频选择播放

项目需要四宫格播放视频&#xff0c;而且还要实现点击视频加入播放。 首先&#xff0c;肯定要实现再一个页面上显示多个视频源并播放视频&#xff1a; <template><div><div v-for"(item,index) in videoList" :key"index" class"te…

在ElementUI项目中集成iconfont图标库

在前端项目开发中经常会遇到使用的组件库提供的ICON图标不够用的情况。最常见的解决方案无非就是把设计图的图标切图引入到项目中。还有就是使用svg图标&#xff0c;封装一个渲染组件在项目里面直接引入这个组件。 本文将介绍另一种方法&#xff0c;即集成iconfont图标库的图标…

9、LLaMA-Factory项目微调介绍

1、LLaMA Factory 介绍 LLaMA Factory是一个在GitHub上开源的项目&#xff0c;该项目给自身的定位是&#xff1a;提供一个易于使用的大语言模型&#xff08;LLM&#xff09;微调框架&#xff0c;支持LLaMA、Baichuan、Qwen、ChatGLM等架构的大模型。更细致的看&#xff0c;该项…

flutter 手写时钟

前言&#xff1a; 之前看过别人写的 js实现的 时钟表盘 挺有意思的&#xff0c;看着挺好 这边打算自己手动实现以下。顺便记录下实现过程&#xff1a;大致效果如下&#xff1a; 主要技术点&#xff1a; 表盘内样 倒角&#xff1a; 表盘下半部分是有一点倒角的感觉&#xff0c;…

尚品汇-MQ模块搭建测试、消息不丢失(重)(四十三)

目录&#xff1a; &#xff08;1&#xff09;消息不丢失 &#xff08;2&#xff09;消息确认 &#xff08;3&#xff09;消息确认业务封装 &#xff08;4&#xff09;封装发送端消息确认 &#xff08;5&#xff09;封装消息发送 &#xff08;6&#xff09;发送确认消息测试…

鸿蒙(API 12 Beta3版)【媒体资源使用指导】Media Library Kit媒体文件管理服务

应用可以通过photoAccessHelper的接口&#xff0c;对媒体资源&#xff08;图片、视频&#xff09;进行相关操作。 说明 在进行功能开发前&#xff0c;请开发者查阅[开发准备]&#xff0c;了解如何获取相册管理模块实例和如何申请相册管理模块功能开发相关权限。文档中使用到p…

基于深度学习的游客满意度分析与评论分析【情感分析、主题分析】

需要本项目的可以私信博主 目录 1 绪论 1.1 选题背景及研究意义 1.1.1 选题背景 1.1.2 研究意义 1.2 研究内容与方法 1.2.1 研究内容 1.2.2 研究方法 1.3 创新与不足 1.3.1创新点 1.3.2研究局限性 2 文献综述 2.1 相关概念界定 2.1.1 大数据分析 2.1.2 游客满意度 2.2 国内外研…

大数据系列之:查看Centos服务器用户可以创建的最大线程数、查看系统内核支持的最大线程数、查看系统支持的最大进程数、设置最大线程数限制、查看进程使用的线程数

大数据系列之:查看Centos服务器用户可以创建的最大线程数、查看系统内核支持的最大线程数、查看系统支持的最大进程数、设置最大线程数限制、查看进程使用的线程数 显示当前用户的资源限制查看用户可以创建的最大线程指定进程的资源限制查看系统内核支持的最大线程数查看系统支…

React 入门第八天:性能优化与开发者工具的使用

随着对React的逐步深入&#xff0c;我开始关注如何优化React应用的性能&#xff0c;特别是在复杂的组件树和频繁的状态更新中保持应用的高效性。这一天&#xff0c;我集中学习了React中的性能优化策略&#xff0c;并探索了如何使用React开发者工具来调试和优化应用。 1. 组件的…

续:当有数据时添加slave2

【示例】 另启一台虚拟机&#xff0c;作为mysql3. 新的虚拟机没有mysql软件包&#xff0c;如何才能快速部署&#xff1f;通过mysql1. mysql1&#xff1a; [rootmysql1 ~]# rsync -al /usr/local/mysql/ root172.25.254.166:/usr/local/mysql The authenticity of host 172.25…

Java算法之快速排序(Quick Sort)

快速排序&#xff1a;分而治之的高效排序算法 简介 快速排序是一种分而治之的排序算法&#xff0c;由C. A. R. Hoare在1960年提出。它通过选取一个元素作为"基准"&#xff08;pivot&#xff09;&#xff0c;然后重新排列数组&#xff0c;使得所有比基准值小的元素都…

【软考】【多媒体应用设计师】媒体与技术

1. 多媒体技术改变了传统循序式模式&#xff0c;用户可以借助超文本链接等方式&#xff0c;更自由灵活地访问所需的信息&#xff0c;体现了其&#xff08; &#xff09;的特点。 A.控制性 B.非线性 C.集成性 D.实时性 答案解析&#xff1a;本题考查信息多媒体非线性特点。多媒体…

安防监控/软硬一体/视频汇聚网关EasyCVR硬件启动崩溃是什么原因?

安防视频监控EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。EasyCVR平台支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、WS-FMP4、HTTP-…

vue part 5

生命周期 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>引出生命周期</title><!-- 引入Vue --><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js&quo…