首页 > 其他分享 >mybatis面试高频问题---执行流程/延迟加载/缓存

mybatis面试高频问题---执行流程/延迟加载/缓存

时间:2024-03-05 17:02:43浏览次数:27  
标签:缓存 作用域 --- 二级缓存 mybatis 延迟 加载

mybatis

一. mybatis执行流程


理解了各个组件的关系
Sql的执行过程(参数映射、sql解析、执行和结果处理)

二. mybatis支持延迟加载

1. 立即加载

查询用户信息的同时也可以查询到相关订单信息
UserMapper:

OrderMapper:

UserTest.java 打印输出用户信息

执行结果:

2. 延迟加载

fetchType="lazy" 开启局部延迟加载
UserMapper:

UserTest.java 打印输出用户信息

执行结果:先调用查询用户信息,然后因为调用了getOrderList(),所以还执行了查找对应订单的sql

在配置文件中开启全局延迟加载:

3. 延迟加载的原理

使用CGLIB创建目标对象的代理对象
调用目标方法user.getOrderList)时,进入拦截器invoke方法,发现user.getOrderList()是null值,执行sql查询order列表3.把order查询上来,然后调用user.setOrderList(List orderList),接着完成user.getOrderList()方法的调用

4. 问题总结

三. mybatis一级与二级缓存


● 本地缓存:基于PerpetualCache,本质是一个HashMap
● 一级缓存:作用域是session级别
● 二级缓存:作用域是namespace和mapper的作用域,不依赖于session

1. 一级缓存

一级缓存:基于PerpetualCache的 HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存

因为这两个都是查询的同一个id的用户信息,所以第二次查询的时候直接在缓存中取,而不需要再次执行SQL语句

2. 二级缓存

二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于SQL session,默认也是采用PerpetualCache,HashMap存储(默认关闭)

开启二级缓存的两个步骤:
1. 全局配置文件

2. 映射文件:使用标签让当前mapper生效二级缓存

3. 执行结果:只调用了一次SQL

注意事项:

  1. 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了新增、修改、删除操作后,默认该作用域下所有select中的缓存将被clear
  2. 二级缓存需要缓存的数据实现Serializable接口
  3. 只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中、

3. 问题总结

标签:缓存,作用域,---,二级缓存,mybatis,延迟,加载
From: https://www.cnblogs.com/xiaolibiji/p/18054404

相关文章

  • mint21.3 安装ADS2020.01 提示缺少libwebkitgtk-3.0-0
    参考之前的方法:https://www.cnblogs.com/zjxcyr/p/15705024.html但是/etc/apt/sources.list中增加:debhttp://cz.archive.ubuntu.com/ubuntubionicmainuniverse然后update就报错。$sudoaptupdateGet:1http://security.ubuntu.com/ubuntujammy-securityInRelease......
  • MyBatis 底层工作原理
    引言SqlSession是MyBatis提供的面向用户的操作数据库API。那么MyBatis底层是如何工作的呢?为了解开MyBatis的神秘面纱,我们需要了解一下MyBatis的其他几个比较核心的组件及这些组件的作用。MyBatis核心组件MyBatis的执行流程及核心组件如图:Configuration:用于描述MyBati......
  • 1-8高灵敏度电容式水位检测芯片VK36W系列 电容式触摸IC原厂【FAE技术支持】
     产品型号:VK36W1D产品品牌:VINKA/永嘉微电封装形式:SOT23-6产品年份:新年份深圳市永嘉微电科技有限公司,原厂直销,原装现货更有优势!工程服务,技术支持,让您的生产高枕无忧!量大价优,保证原装正品。您有量,我有价!概述VK36W1D具有1个触摸检测通道,可用来检测水从无到有和水从有到无的......
  • spring面试高频问题---springboot自动配置
    springboot自动配置1.springboot自动配置原理自动配置主要依赖于@SpringBootApplication注解,其中还包含了三个注解@SpringBootConfiguration:该注解与@Configuration注解作用相同,用来声明当前也是个配置类。@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。@Ena......
  • resurfaceio goreplay output-s3 minio 兼容处理
    实际上此问题与以前版本goreplay对于s3的支持是一样的参考处理添加了新的环境变量AWS_FORCE_PATH_STYLE以及AWS_DISABLE_SSL,具体代码在rongfengliang/goreplay-new/blob/resurface/s3_reader.go中参考使用exportAWS_ACCESS_KEY_ID=minioexportAWS_SECRET_ACCE......
  • spring面试高频问题---spring框架中常见的注解常见注解
    Spring-框架中常见的注解1.spring常见注解2.springmvc常见注解3.springboot常见注解......
  • day 05-3 数据类型(字符串)
    3.3公共功能1.字符串相加v1="linzai"+"是个好人"print(v1)#linzai是个好人2.字符串相乘v1="linzai"*3print(v1)#linzailinzailinzai3.计算字符串的长度v1="linzai"data=len(v1)#计算字符串的长度print(data)#64.获取字符串的字符,索引字符......
  • 洛谷题单指南-搜索-P2895 [USACO08FEB] Meteor Shower S
    原题链接:https://www.luogu.com.cn/problem/P2895题意解读:所谓安全格子,就是在所有流星坠落之后,没有被烧焦的格子,要计算从起点到这些格子任一一个的最短路径,BFS可以解决。解题思路:1、读取数据,先把所有流星坠落点以及周围被烧焦的格子进行标记,得到安全格子2、从起点开始BFS,每走......
  • 体验el-select的远程搜索功能
    需求描述没有什么技术难度,需求如下,要求上来默认加载几个选项,然后根据用户的输入,实时更新选项,且支持用户新增。(请看gif)解决方案首先要找到了el-select组件,然后里面有一个远程搜索功能。官方文档:https://element-plus.org/zh-CN/component/select.html代码如下:<el-select......
  • springMVC执行流程--
    springMVC执行流程1.springMVC执行流程Springmvc的执行流程是这个框架最核心的内容视图阶段(老旧JSP等)前后端分离阶段(接口开发,异步)2.视图阶段(jsp)重要的组件:前端控制器、处理器映射器、处理器适配器、视图解析器3.前后端分离阶段(接口开发,异步)4.问题总结......