Mybatis的一些问答记录

0、delegate属性即装饰器,调用cache中的任意一个方法都会沿着链条往下依次执行。
1、JDBC的PreparedStatement(一次编译多次执行)每执行一次executeQuery()就会清空上一次的参数,执行完executeQuery()后就可以获取结果。
在这里插入图片描述
ReuseExecutor可重用执行器可以指定使用JDBC批处理的statement吗?
2、 ReuseExecutor与BatchExecutor是不是都是使用JDBC的PreparedStatement;只不过BatchExecutor使用PreparedStatement的addBatch方法实现批处理,而ReuseExecutor没有使用该方法?

3、LRU算法为什么要采用LinkHashMap实现?

HashMap 是 Java Collection Framework的重要成员,也是Map族(如下图所示)中我们最为常用的一种。不过遗憾的是,HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便,因为在有些场景中,我们确需要用到一个可以保持插入顺序的Map。庆幸的是,JDK为我们解决了这个问题,它为HashMap提供了一个子类—— LinkedHashMap。虽然LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。因此,根据链表中元素的顺序可以将LinkedHashMap分为:保持插入顺序的LinkedHashMap 和保持访问顺序的LinkedHashMap,其中LinkedHashMap的默认实现是按插入顺序排序的。与HashMap相比,LinkedHashMap增加了两个属性用于保证迭代顺序,分别是双向链表头结点header 和 标志位accessOrder(值为true时,表示按照访问顺序迭代;值为false时,表示按照插入顺序迭代)。因此LinkedHashMap可以很好的支持LRU算法,然而当我们要用LinkedHashMap实现LRU算法时,就需要调用相应的构造方法并将accessOrder置为true。
摘自原文链接:https://blog.csdn.net/justloveyou_/article/details/71713781

4、FIFO底层实现:队列。

5、 二级缓存获取同一个缓存,得到的结果一样但是却不是同一个缓存对象,因为使用了序列化。为什么要进行序列化?序列化可以关闭吗?

跨线程不能让两个对象完全一样否则可能会出现数据混乱,所以要有序列化。该对象数据有变化时会重新从数据库中进行查询。

6、一级缓存查过之后马上可以取,二级缓存必须会话提交之后才能获取刚刚设置的缓存值。自动提交也不会命中缓存吗?调用清空方法时也必须要进行提交才会真正生效,否则还是会存在缓存。

7、二级缓存与执行器之间的结构关系

BaseExecutor基础抽象执行器是三个具体执行器共性功能(一级缓存维护、事务管理)的抽象集合(竖向扩展),主要是MyBatis关于一级缓存相关的逻辑。而MyBatis二级缓存是由CachingExecutor二级缓存执行器进行横向扩展,具体是采用装饰者模式进行实现。
CachingExecutor二级缓存执行器包含了一级缓存执行器
@CacheNamespace声明二级缓存空间
二级缓存必须提交之后才会更新

8、会话与执行器之间的关系
在这里插入图片描述
9、一次查询请求完整的执行流程
在这里插入图片描述
10、如何包装的二级缓存流程
在这里插入图片描述

11、二级缓存与一级缓存
在这里插入图片描述
二级缓存生命周期与应用同步即应用不挂,二级缓存就不会被gc;
二级缓存在CachingExecutor;一级缓存在BaseExecutor

12、Mybatis一级缓存命中场景:

一级缓存是默认打开的,存储结构为key-value形式底层是HashMap
localCacheScope=STATEMENT在中

13、只有执行数据库查询操作的才会存在StatementHandler

14、为什么要通过Configuration创建StatementHandler?目的就是要统一。(简单工厂);对对象统一插件拦截,嵌入插件

15、为什么要设置一个ResultContext组件?控制解析数量及解析状态。

16、懒加载那里为什么会用Exector执行器而不是会话呢?懒加载只使用一次,而会话是多次,所以直接使用Exector执行器就可以了。

17、源码阅读的一个小技巧

先了解整体分为哪些大的组件,再针对想了解的组件写测试案例,打断点看组件结构;源码中很多时候,参数最多的方法往往就是最终的一个实现即具体逻辑的处理(方法重载、参数的转换与传递)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

105、Zero-1-to-3: Zero-shot One Image to 3D Object

简介 官网  使用合成数据集来学习相对摄像机视点的控制,这允许在指定的摄像机变换下生成相同对象的新图像,用于从单个图像进行三维重建的任务。 实现流程 输入图像 x ∈ R H W 3 x \in \R^{H \times W \times 3} x∈RHW3,所需视点的相…

无人机视角、多模态、模型剪枝、国产AI芯片部署

无人机视角、多模态、模型剪枝、国产AI芯片部署是当前无人机技术领域的重要研究方向,其原理和应用价值在以下几个方面进行详细讲述。 一、无人机视角:无人机视角是指在无人机上搭载摄像头等设备,通过航拍图像获取环境信息,并进行…

生产力与生产关系 —— 浅析爱泼斯坦事件 之 弱电控制强电原理

据网络文字与视频资料,爱泼斯坦事件是犹太精英阶层,为了掌控美国国家机器为犹太利益集团服务,而精心设下的一个局。本文先假设这个结论成立,并基于此展开讨论。 我们知道,弱电管理强电是电气工程中的一门专门学问&…

6 - 常用工具类

目录 1. Scanner 扫描控制台输入 1.1 扫描控制台输入 1)nextLine 2)nextInt 3)其他方法 1.2 扫描文件 1.3 查找匹配项 2. Arrays 数组工具 2.1 创建数组 1)copyOf 2)copyOfRange 3)fill 2.2 比…

GPT的版本发展历史及特点

版本介绍 GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI推出。以下是GPT的版本发展、特点和区别: GPT-1 GPT-1是最早发布的版本,于2018年发布。它具有1.17亿个参数&…

【Spring 篇】走进SpringMVC的世界:舞动Web的激情

嗨,亲爱的小白们!欢迎来到这篇关于SpringMVC的博客,让我们一起探索这个舞动Web的框架,感受它带来的激情和便利。在这个世界里,我们将学到SpringMVC的概述、开发步骤以及如何快速入门,一切都是如此的令人兴奋…

科研绘图(五)玫瑰图

柱状图的高级平替可视化 “玫瑰图”,通常也被称为“科克斯图”。它类似于饼图,但不同之处在于每个部分(或“花瓣”)的角度相同,半径根据它表示的值而变化。这种可视化工具对于周期性地显示信息非常有用,比…

bash shell基础命令(一)

1.shell启动 shell提供了对Linux系统的交互式访问,通常在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。 /etc/passwd/文件包含了所有用户的基本信息配置, $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash ...例如上述root账户信…

使用 Apache POI 更新/覆盖 特定的单元格

使用 Apache POI 更新特定的单元格 一. 需求二. 实现三. 效果 一. 需求 将以下表中第4行,第4列的单元格由“张宇”更新为“汤家凤”,并将更行后的结果写入新的Excel文件中; 二. 实现 使用Apache POI,可以精确定位到需要更改的单…

非递归实现归并排序

目录 非递归的归并排序 非递归的归并排序 实现流程参考图: 1、像递归实现归并排序一样,开辟n个空间大小的临时数组 2、利用变量gap模仿递归的过程,gap表示归并时的每组数据的个数 3、利用while循环实现归并,并且每一次我们要的…

鸿蒙开发笔记(三):页面和自定义组件生命周期

先明确自定义组件和页面的关系: 自定义组件:Component装饰的UI单元,可以组合多个系统组件实现UI的复用。 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,Entry装饰的自定义组件为页面的入口组件&#xff0c…

Linux环境基础开发工具的使用(下)

文章目录 Linux编译器 - gcc/ggcc/g如何使用预处理阶段编译阶段汇编阶段链接阶段gcc选项汇总静态库与动态库gdb命令汇总 Linux项目自动化构建工具 - make/Makefilemake/Makefile的意义使用make/makefile原理 Linux编译器 - gcc/g 背景知识 我们知道一个代码写完要变为可执行程…

OpenHarmony—编译构建指导

概述 OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能: 以部件为最小粒度拼装产品和独立编译。支持轻量、小型、标准三种系…

大厂咋做支付系统的核对?

核对是保障资金安全的重要机制。 时效角度,主要有: (准)实时核对 准确性不如离线核对,且需相应实时核对平台建设 离线核对(如 T1 核对) 主要问题是发现问题的时机较为后置,部分场景…

微信小程序-----全局配置与页面配置

目录 前言 全局配置文件 一、window 1. 小程序窗口的组成部分 2. window 节点常用的配置项 3. 设置导航栏的标题 4. 设置导航栏的背景色 5. 设置导航栏的标题颜色 6. 全局开启下拉刷新功能 7. 设置下拉刷新时窗口的背景色 8. 设置下拉刷新时 loading 的样式 9. 设置…

蓝桥杯备赛 | 洛谷做题打卡day2

​ 蓝桥杯备赛 | 洛谷做题打卡day2 嵌套循环yyds!! 题目来源:洛谷P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n n n 行 m m m 列的雷区中有一些格子含有地雷&am…

跨域请求的API接口调用流程

在Web开发中,前端和后端相互通信是非常常见的需求。通常情况下,前端通过发送HTTP请求调用后端的API接口来获取数据或执行某些操作。然而,由于同源策略的限制,浏览器默认情况下不允许跨域请求,即前端不能直接从一个域名…

48 WAF绕过-权限控制之代码混淆及行为造轮子

目录 Safedog代码层手写及脚本绕过BT Aliyun代码层手写及脚本绕过safedog,BT,Aliyun-基于覆盖加密变异下编码解码绕过-代码层Safedog,BT,Aliyun-基于冰蝎新型控制器绕过全面测试-行为层Safedog,BT,Aliyun-基于手写新型控制器绕过全…

添加 自定义校验方法,让用户自定义校验规则

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、相关回顾 添加 常用校…

软件设计师4--寻址方式

软件设计师4--寻址方式 考点1:指令的基本概念考点2:寻址方式例题: 考点1:指令的基本概念 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下: 操作码字段地址码…
最新文章