Mybatis一级缓存

文章目录

  • Mybatis一级缓存原理
    • 一级缓存特点
    • 命中原则
    • 生命周期
    • 源码解读
    • 设计理念
    • Spring集成

Mybatis一级缓存原理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

一级缓存特点

自动启用
通过在setting中设置localCacheScope= STATEMENT(默认为SESSION)全局禁用一级缓存
在Dao接口方法上添加注解:@Options(flushCache=Options.FlushCachePolicy.True),禁用这个方法的一级缓存

命中原则

同一SqlSession内,以下5个条件组成key,放入缓存中:
条件一:statementId相同
条件二:sql上用到的参数要一样
条件三:分页参数要一样
条件四:sql语句的文本要一样
条件五:数据库连接的environment要一样

生命周期

产生:sqlSession执行查询方法,而不是update等
销毁:sqlSession关闭、sqlSession提交、sqlSession回滚、sqlSession执行update(新增、删除、更新)后底层会执行清除、主动清除
辟谣:Mybatis 一级缓存脏读(数据被另外事务修改并提交后,仍会从缓存中读到旧数据(错误),实际是避免了事务不可重复读问题), Mybatis 一级缓存是在事务的生命周期之内的,在关闭session、执行commit、执行rollback都会清空Mybatis一级缓存。 实际上Mybatis 一级缓存反而避免了数据库事务中的脏读(读未提交)、不可重复读(读提交)问题。

源码解读

代理模式与装饰模式的区别:代理模式在无参构造方法中确定地new了一个被代理的对象,编译时已经可以确定;而装饰模式是通过有参构造方法将被装饰对象传入装饰 类中,能够在运行时递归地被构造。

设计理念

在一个session内,不过期、不更新、不限制;
与spring整合时,如果开启了事务,事务内,Spring通过ThreadLocal始终使用同一个sqlSession,一级缓存生效; 如果没有开启事务,每次查询前会创建一个sqlSession,查询结束后会关闭sqlSession,所以一级缓存无效;

Spring集成

在这里插入图片描述

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

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

相关文章

【GO语言卵细胞级别教程】01.GO基础知识

01.GO基础知识 目录 01.GO基础知识1.GO语言的发展历程2.发展历程3.Windowns安装4.VSCode配置5.基础语法5.1 第一段代码5.2 GO执行的流程5.3 语法规则5.4 代码风格5.5 学习网址 1.GO语言的发展历程 Go语言是谷歌公司于2007年开始开发的一种编程语言,由Robert Griese…

Spring之强大的DefaultListableBeanFactory

系列文章目录 如何查看类继承结构参考这里 文章目录 系列文章目录一、DefaultListableBeanFactory的类继承实现结构二、实现接口 一、DefaultListableBeanFactory的类继承实现结构 二、实现接口 AliasRegistry:支持别名功能,一个名字可以对应多个别名B…

Java Arrays.copyOfRange的用法

Arrays.copyOfRange的使用方法: 将一个数组拷贝至另一个数组中 参数: original:第一个参数为要拷贝的数组对象 from:第二个参数为拷贝的开始位置(包含) to:第三个参数为拷贝的结束位置&#x…

数字孪生与边缘计算的结合

数字孪生与边缘计算的结合可以在物理实体附近进行实时数据处理和决策,从而提高响应速度、降低延迟,并有效地利用边缘资源。以下是数字孪生在边缘计算中的一些应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开…

在pycharm中执行 os.makedirs 提示用户名或密码不正确

问题:在pycharm中运行脚本,在 \10.0.21.249\share 共享目录下创建目录提示错误 发现:手动在该目录下创建目录没有问题。 解决方法: 切换到cmd 命令行运行该脚本成功创建 猜测:感觉应该是pycharm中使用的用户名和密码存…

CF1909_C. Heavy Intervals题解

CF1909_C. Heavy Intervals题解 题目传送门(Problem - C - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1909/problem/C)。 题目翻译如下:(图片来源&a…

【云原生】Docker学习笔记

安装docker 系统信息: passnightpassnight-s600:/etc/apt/trusted.gpg.d$ cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.1 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION"22.04.1 LTS (Jammy Jellyfish)" VERSION_COD…

面向对象的三大特征之一多态

多态 概念 多态是同一个对象,在不同时刻表现出来不同的形态,称之为多态。 例如:水,我们把水理解成为一个对象,而水会有不同的形态,比如 液态水、冰块、水蒸气 多态的前提 有继承/实现关系(继承…

【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 概述

【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 概述-CSDN博客 【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行环境搭建-CSDN博客 【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行模式-CSDN博客 1、 Hadoop 是什么 (1)Hadoop是一个由Apache基…

全屏字幕滚动APP:12月份广告总收:84.89元(2023年12月份) 穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益

接入穿山甲SDK app示例: android 数独小游戏 经典数独休闲益智 广告接入示例: Android 个人开发者如何接入广告SDK,实现app流量变现 2023年12月份,总新增用户1242 友盟统计: 12月份:总新增用户1242 2023年12月份…

OpenCV-15位运算

OpenCV中的逻辑运算就是对应位置的元素进行与、或、非和异或。 Opencv与Python不同的是:OpenCV中0的非反过来是255,255反过来是0。 但是Python中255非为-256。 一、非运算 使用API---cv.bitwise_not(str) 示例代码如下: import cv2 imp…

QT_01 安装、创建项目

QT - 安装、创建项目 1. 概述 1.1 什么是QT Qt 是一个跨平台的 C图形用户界面应用程序框架。 它为应用程序开发者提供建立艺术级图形界面所需的所有功能。 它是完全面向对象的,很容易扩展,并且允许真正的组件编程。 1.2 发展史 1991 年 Qt 最早由奇…