一级缓存也叫本地缓存,MyBatis 的一级缓存是在会话(SqlSession)层面进行缓存的。MyBatis 的一级缓存是默认开启的,不需要任何的配置。

首先我们必须去弄清楚一个问题,在MyBatis 执行的流程里面,涉及到这么多的对象,那么缓存PerpetualCache 应该放在哪个对象里面去维护?如果要在同一个会话里面共享一级缓存,这个对象肯定是在SqlSession 里面创建的,作为SqlSession 的一个属性。

DefaultSqlSession 里面只有两个属性,Configuration 是全局的,所以缓存只可能放在Executor 里面维护——SimpleExecutor/ReuseExecutor/BatchExecutor 的父类BaseExecutor 的构造函数中持有了PerpetualCache。

在同一个会话里面,多次执行相同的SQL 语句,会直接从内存取到缓存的结果,不会再发送SQL 到数据库。但是不同的会话里面,即使执行的SQL 一模一样(通过一个Mapper 的同一个方法的相同参数调用),也不能使用到一级缓存。

接下来我们来验证一下,MyBatis 的一级缓存到底是不是只能在一个会话里面共享,以及跨会话(不同session)操作相同的数据会产生什么问题。

MyBatis 缓存详解-一级缓存(本地缓存)介绍相关推荐

  1. 清理linux服务器缓存,详解Linux手动释放缓存的方法

    详解Linux手动释放缓存的方法 发布时间:2020-08-20 07:53:27 来源:脚本之家 阅读:87 作者:闪电王国 栏目:服务器 Linux释放内存的命令: sync echo 1 > ...

  2. MyBatis 缓存详解-一级缓存的不足

    使用一级缓存的时候,因为缓存不能跨会话共享,不同的会话之间对于相同的数据可能有不一样的缓存.在有多个会话或者分布式环境下,会存在脏数据的问题.如果要解决这个问题,就要用到二级缓存. [思考]一级缓存怎 ...

  3. MyBatis 缓存详解-一级缓存验证

    (基于mybatis-standalone 工程,注意演示一级缓存需要先关闭二级缓存,localCacheScope 设置为SESSION) 判断是否命中缓存:如果再次发送SQL 到数据库执行,说明没 ...

  4. MyBatis 一级缓存二级缓存详解

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) MyBatis 缓存详解 cache 缓存 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernat ...

  5. Mybatis二级缓存详解

    Mybatis二级缓存 Mybatis相关全览 一.简介 二.一级缓存 1.入口 2.演示 案例一: 案例二: 3.总结 三.二级缓存 1.入口 2.如何开启二级缓存 cache-ref配置 cach ...

  6. cpu二级缓存和一级缓存详解及区别(图解)

    cpu二级缓存和一级缓存详解及区别(图解) 2012-09-02 12:27:55|  分类: 硬件技术 |字号 订阅 处理器缓存的传输速率确实很高,然而还不足以取代内存的地位,这主要是由于缓存只是内 ...

  7. [面试专题]Web缓存详解

    Web缓存详解 标签(空格分隔): 缓存 缓存之于性能优化 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度. 降低服务器压力: ...

  8. mybatis和hibernate的一级、二级缓存

    MyBatis一级缓存: hibernate一级缓存: 基本差不多 HashMap本地缓存,作用域为session,session级别的缓存,通过get,update可以将对象放到一级缓存中,当 Se ...

  9. Hibernate二级缓存详解(转)

    Hibernate二级缓存详解(转) 本文转载 http://www.blogjava.net/supercrsky/articles/238580.html 与Session相对的是,Session ...

最新文章

  1. linux sshpass 非交互的ssh密码验证 简介
  2. 多地发钱鼓励生育,能刺激年轻人生娃吗
  3. vue前端上传文件夹的插件_基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件...
  4. ***远程连接MYSQL提示1130 - Host is not allowed to connect to this MySQL server
  5. GDCM:gdcm::XMLPrinter的测试程序
  6. FileZilla搭建FTP服务器图解教程
  7. 创业码农被公司套路最惨的一次经历
  8. 斜率优化dp学习笔记
  9. android开发常用的组件,Android开发常用控件与属性
  10. python异步爬虫下载_Python3 异步代理爬虫池
  11. 实验室-Chrome小恐龙跑酷游戏加强版
  12. 三维坐标系旋转的顺时针_逆时针问题
  13. 如何在水经注微图中加载地形地貌图进行道路设计
  14. C/C++程序设计13:代码实现开机自启动--以QQ为例
  15. 罗米欧与朱丽叶(徐志摩)
  16. 孢子社群:今日推荐人工智能微信群:智能群3群 智能大数据合作交流群
  17. 打蚊子表情包_打蚊子表情包 - 打蚊子微信表情包 - 打蚊子QQ表情包 - 发表情 fabiaoqing.com...
  18. 搜索引擎:Elasticsearch、Solr、Lucene
  19. Android 腾讯位置服务地图简单使用
  20. 因特网的发展大致分为哪几个阶段?请指出这几个阶段的主要特点。

热门文章

  1. 解惑:什么才是真正的迅驰2平台本本
  2. Linux SSH基础
  3. oracle 之 using 使用
  4. 类与类集合的基本使用
  5. OnPaint()函数的作用原理
  6. Oracle数据库表空间占用过大的解决办法
  7. (十)HTML5本地存储——SQLLite实现web留言本
  8. 笔试算法题(28):删除乱序链表中的重复项 找出已经排好序的两个数组中的相同项...
  9. python中使用if __name__ == '__main__':
  10. Shell脚本批量创建用户并随机生成密码