二级缓存中有一个属性为readOnly
官网的解释如下:
readOnly(只读)属性可以被设置为 true 或 false。
1.(true)只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。
2.(false)而可读写的缓存会(通过序列化)返回缓存对象的拷贝。速度上会慢一些,但是更安全,因此默认值是 false。

按照我自己的理解
1.当readOnly=true时 ,提示缓存此时应该只是用来读取数据 不要修改数据, 若A在此时修改了从缓存中提取出的数据会使得缓存中存取的数据也被修改,B在这时读取数据就会读取出被A修改后的错误数据。
2.当readOnly=false时, A修改了从缓存中提取出的数据并不会改变缓存中存储的原数据,B此时读取的就不会是错误的数据,这就确保了数据的安全。

下面是代码运行的结果展示:

设置readOnly=true时

 @Test// 二级缓存测试 1public void testCacheLevel2() {// 得到 session对象final SqlSession session1 = factory.openSession();final SqlSession session2 = factory.openSession();// 得到 mapper 对象 (dao)final UserMapper mapper1 = session1.getMapper(UserMapper.class);final UserMapper mapper2 = session2.getMapper(UserMapper.class);final User user = mapper1.selectById(1);System.out.println(user);// 关闭 session 1session1.close();System.out.println("before session query =============");//从缓存中获取数据赋给user2final User user2 = mapper2.selectById(1);//改变usernameuser2.setUsername("shit2");System.out.println("user2 " + user2);System.out.println("user" + user );System.out.println(user == user2);// 关闭session2.close();}


结果:可以看到当改变姓名(王五)为(shit2)后,user对象中的姓名属性也改变为了(shit2)。

设置readOnly=false时

结果:可以看到当改变姓名(王五)为(shit2)后,user对象中的姓名属性并没有发生改变依然为(王五)。
可以理解为改变的对象仅是缓存中的一个拷贝,并没有改变缓存中存储数据的原对象。

Mybatis二级缓存配置中readOnly属性的理解相关推荐

  1. MyBatis二级缓存的配置

    Mybatis的二级缓存配置非常简单,只需要在mapper.xml中添加一句 <cache /> 如果需要跟详细的配置可以配置其属性 <mapper namespace=" ...

  2. SpringBoot整合Redis配置MyBatis二级缓存

    目录 写在前面 源码获取 一.MyBatis缓存机制 1.1.一级缓存 1.2.二级缓存 二.集成Redis 2.1.安装Redis 2.2.项目引入Redis 2.2.1.Maven依赖 2.2.2 ...

  3. SpringMVC + MyBatis + MySQL + Redis(作为二级缓存) 配置

    前言 Mybatis 有二级缓存,为什么还要用Redis? mybais一级缓存作用域是session,session commit之后缓存就失效了. mybais二级缓存作用域是sessionfac ...

  4. SpringMVC +Spring + MyBatis + Mysql + Redis(作为二级缓存) 配置

    转载:http://blog.csdn.net/xiadi934/article/details/50786293 项目环境: 在SpringMVC +Spring + MyBatis + MySQL ...

  5. redis springmvc mysql_SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置

    项目环境: 在SpringMVC + MyBatis + Mysql.Redis部署在Linux虚拟机. 1.整体思路 参考Ehcache实现MyBatis二级缓存代码(Maven引用对应jar查阅) ...

  6. mysql redis缓存配置_SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置

    项目环境: 在SpringMVC + MyBatis + MySQL.Redis部署在Linux虚拟机. 1.整体思路 参考Ehcache实现MyBatis二级缓存代码(Maven引用对应jar查阅) ...

  7. 深入了解MyBatis二级缓存

    深入了解MyBatis二级缓存 一.创建Cache的完整过程 我们从SqlSessionFactoryBuilder解析mybatis-config.xml配置文件开始: Reader reader ...

  8. MyBatis复习(六):MyBatis二级缓存

    Mybatis缓存分为一级缓存和二级缓存 MyBatis一级缓存是默认开启的,数据存储范围是SqlSession会话这个级别,当SqlSession关闭后,缓存就会被清除,生命周期非常短. MyBat ...

  9. Mybatis一级缓存、整合第三方缓存ehcache、Mybatis二级缓存

    8. 缓存 8.1 一级缓存 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的 ...

最新文章

  1. vue中axios如何实现token验证
  2. 【poj3208-Apocalypse Someday】数位DP
  3. 「功能笔记」Spacemacs+Evil备忘录
  4. 中leetcode提示未登录_分享一款将 LeetCode 中 AC 的题目转化为 MarkDown 表格的插件...
  5. python 遍历数组根据规律拆分,python 实现以相同规律打乱多组数据
  6. 坐标轨迹计算_机器人的轨迹规划与自动导引
  7. 模版 ----- 一维前缀和与二维前缀和
  8. Atitit attilax擅长项目解析与大数据采集提取 词法分析 电话号码提取 package vcfvcardprj; import java.util.Collection; imp
  9. 多目标跟踪入门篇(1):SORT算法详解
  10. 如何用代码在Excel中实现单元格内换行
  11. 外贸建站之独立站系统选择
  12. 如何将 ONLYOFFICE 文档与 Sharepoint 进行连接
  13. Flutter上线项目实战——苹果内购
  14. QQ远程协助不能控制win7系统的解决方法
  15. IoT-阿里云物接入套件
  16. 努力工作的意义是什么?致迷失的自己
  17. 2021防爆电气考试题库
  18. JAVA UUID 获取方法
  19. 清华大学计算机学院公开课,清华大学公开课
  20. 世茂以弘扬独特的工匠精神 辉映现代人居潮向

热门文章

  1. 美CFTC前主席、现任委员Heath Tarbert将于3月5日离职
  2. linux快捷键及主要命令(转载)
  3. 服务器进行压力测试+性能测试
  4. YOLOv6 Pro | YOLOv6网络魔改 (1) ——RepGFPN融合高效聚合网络(ELAN)和重参数化的目标检测Neck(来自DAMO-YOLO)
  5. 零基础入门金融风控之贷款违约预测—赛题理解
  6. nvme固态必须uefi启动吗_为什么 Windows 10 开机启动这么快
  7. lighttp支持PHP移植到imx6,[Qt开发指南]飞凌嵌入式iMX6开发板QT移植
  8. java获取钉钉userId,发送钉钉消息
  9. 最佳5款适合 3D 建模和渲染笔记本电脑
  10. Python : re.match函数