这里写目录标题

  • 一. 概念
    • 1.1 定义
    • 1.2 作用
    • 1.3 使用场景
  • 二. MyBatis一级缓存
    • 2.1 引入
    • 2.2 简介
    • 2.3 生命周期
  • 三. MyBatis二级缓存(全局缓存)
    • 3.1 简介
    • 3.2 何时存入
    • 3.3 过期时间

一. 概念

1.1 定义

缓存是存在于内存中的临时数据;

1.2 作用

查询的时候从缓存读取,能减少和数据库的交互,提高效率;

1.3 使用场景

(1)适合用缓存:

  • 经常查询并且不常改变的;
  • 数据的正确与否对最终结果影响不大;

(2)不适合用缓存:

  • 经常改变的数据;
  • 数据的正确与否对结果影响较大的;

二. MyBatis一级缓存

2.1 引入

当使用Mybatis进行数据库的操作时候,会创建一个SqlSession来进行一次数据库的会话,会话结束则关闭SqlSession对象。

如果我们很有可能多次查询完全相同的sql语句,每一次查询都查询一次数据库,那查询数据库代价是比较大的,这会导致系统的资源浪费;

为了解决这个问题,Mybatis对每一次会话都添加了缓存操作,相同的SQL不用再查数据库;

2.2 简介

一级缓存是 默认开启 的。

一级缓存作用域是sqlsession级别的;

同一个sqlsession中执行相同的sql查询(相同的sql和参数),第一次会去查询数据库并写到缓存中,后序的查询将会从一级缓存读取,而不会查数据库,提升了效率。

2.3 生命周期

MyBatis在开启一个数据库会话时,会创建一个新的SqlSession对象,当会话结束时,SqlSession对象会被释放掉。

即一级缓存的生命周期是一次会话。

三. MyBatis二级缓存(全局缓存)

3.1 简介

二级缓存是 默认关闭 的。

二级缓存是 Mapper 映射文件级别的缓存,多个 SqlSession 去操作同一个 Mapper 的 sql 语句,多个 SqlSession 可以共享二级缓存,二级缓存是跨 SqlSession 的全局变量。

当 Mybatis 调用 Dao 层查询数据库时,先查询二级缓存,二级缓存中无对应数据,再去查询一级缓存,一级缓存中也没有,最后去数据库查找。

3.2 何时存入

在关闭sqlsession后(close),才会把该sqlsession一级缓存中的数据添加到namespace的二级缓存中。

开启了二级缓存后,还需要将要缓存的pojo实体类实现Serializable接口,为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质多种多样,不一定只存在内存中,有可能存在硬盘中。

3.3 过期时间

当存取数据的时候,都有检测一下cache的生命时间,默认是1小时,如果这个cache存活了一个小时,那么将整个清空一下。

参考:
https://blog.csdn.net/guorui_java/article/details/118095020
https://mikechen.cc/17833.html
https://zhuanlan.zhihu.com/p/388720463

MyBatis:一级缓存和二级缓存相关推荐

  1. Mybatis一级缓存,二级缓存的实现就是这么简单

    介绍 又到了一年面试季,所以打算写一点面试常问的东西,争取说的通俗易懂.面试高级岗,如果你说熟悉Mybatis,下面这些问题基本上都会问 Mybatis插件的实现原理? 如何写一个分页插件? Myba ...

  2. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存

    设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --><settings& ...

  3. MyBatis框架:延迟加载策策略、一级缓存、二级缓存

    MyBatis框架:延迟加载策略和缓存 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用association实现延迟加载 1.3.1 账户的持久层DAO接口 1. ...

  4. 浅谈Mybatis的一级缓存和二级缓存

    MyBatis的缓存机制 缓存的引入 当我们大量执行重复的查询SQL语句的时候,会频繁的和数据库进行通信,会增加查询时间等影响用户体验的问题,可以通过缓存,以降低网络流量,使网站加载速度更快. MyB ...

  5. MyBatis】MyBatis一级缓存和二级缓存

    转载自  MyBatis]MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存.一级缓存的作用域默认是一个SqlSe ...

  6. Mybatis 详解--- 一级缓存、二级缓存

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据 ...

  7. Mybatis源码分析之(七)Mybatis一级缓存和二级缓存的实现

    文章目录 一级缓存 二级缓存 总结 对于一名程序员,缓存真的很重要,而且缓存真的是老生常谈的一个话题拉.因为它在我们的开发过程中真的是无处不在.今天LZ带大家来看一下.Mybatis是怎么实现一级缓存 ...

  8. 框架源码专题:Mybatis的一级缓存、二级缓存是什么?有什么作用?

    文章目录 1. Mybatis中缓存的作用 2. 一级缓存 3. 二级缓存 4. 一级缓存和二级缓存的区别 5. 通过代码观察Mybatis缓存工作的全过程 1. Mybatis中缓存的作用 首先缓存 ...

  9. MyBatis中的一级缓存和二级缓存介绍

    先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据库的压力,同时提高系统性能. 一级缓存 一级 ...

  10. mybatis 详解------ 一级缓存、二级缓存(九)

    mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMa ...

最新文章

  1. eslint vscode 自动格式化_配置VSCode编辑器适配VUE3开发
  2. Python常用模块之hashlib模块
  3. oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)
  4. 免费的微软OneCare防病毒软件
  5. WinSock I/O 模型 -- WSAEventSelect 模型
  6. java cms bootstrap_thinkcms: Java CMS系统,完善的后台功能,大气的前台页面. 使用springMVC,hibernate,bootstrap,amazeui....
  7. 聊聊有哪些参与项目的好途径吧
  8. pytorch中获取指定位置元素
  9. hive 如果表不存在则创建_从零开始学习大数据系列(四十七) Hive中数据的加载与导出...
  10. 利用poi开源jar包操作Excel时删除行内容与直接删除行的区别
  11. 服务器压力测试_性能测试相关的面试题
  12. macOS 12 Monterey 推出首个测试版本
  13. 兄弟连教育分享:用CSS实现鼠标悬停提示的方法
  14. 灵敏度和稳定性能兼具 新气体传感器技术适用于工业应用
  15. QQ for linux
  16. QQ影音播放器 for Mac
  17. SAP License:ERP实施方案包括哪些内容?
  18. C++:缺省参数是怎样设置的?
  19. CMOS图像传感器工作原理
  20. linux ubuntu木马,Ubuntu病毒查杀 ClamAV 简介以及适用范围

热门文章

  1. 开tbc服务器维护吗,官方消息:关于TBC服务器分离,还有全新的轮回服务器
  2. 谷歌无人车开创者敲钟上市!平台型自动驾驶第一股市值130亿美元
  3. vim 显示行号 (Linux)
  4. iphone导出视频 无法连接到设备_Mac上iPhone数据恢复软件 Cisdem iPhone Recovery 破解版...
  5. intellij idea 改变文字背景色
  6. think5php的使用,实例分享Thinkphp5行为使用方法
  7. 手机上的计算机黑屏怎么办,电脑黑屏不显示怎么办?不花钱就能解决的方法,分分钟教会你!...
  8. Linux环境下的Qt5编程(闹钟)
  9. 微信python小课_微信公众号广告案例:Pytnon小课
  10. 安卓传输文件Linux,你知道Linux下的安卓文件传输助手的作用?