1、一级缓存

默认情况下,一级情况下缓存自动开启,只在一次sqlSession中有效,也就是拿到连接到关 闭连接这个区间段

对同一个查询语句,只进行一次查询。第二次从缓存中直接查询用户。

  • 映射语句文件中的所有 select 语句的结果将会被缓存。

  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。执行以上语句后:

  • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。

  • 缓存不会定时进行刷新(也就是说,没有刷新间隔)。

  • 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。

  • 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

刷新缓存会导致缓存失效。

sqlSession.clearCache();//手动清理缓存

2、二级缓存

二级缓存又叫全局缓存,默认开启,也可在设置中开启

cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true

工作机制:

  • 一个会话查询一条数据,就会被放在当前会话的一级缓存中

  • 如果会话关闭,一级缓存中的数据会被保存到二级缓存中

  • 新的回话内容会从二级缓存中取出来

SqlSession sqlSession = MybatisUtils.getSqlSession();
SqlSession sqlSession2 = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user1 = mapper.getUser(1);
System.out.println(user1);
sqlSession.close();UserMapper mapper2 = sqlSession2.getMapper(UserMapper.class);
User user2 = mapper2.getUser(1);
System.out.println(user2);System.out.println(user1==user2);sqlSession2.close();

开启二级缓存:

<cacheeviction="FIFO"flushInterval="60000"size="512"readOnly="true"/>
<!--也可以无参数 <cache/> -->

可用的清除策略有:

  • LRU – 最近最少使用:移除最长时间不被使用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
  • WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。

默认的清除策略是 LRU。

提示:
二级缓存是事务性的。这意味着,当 SqlSession 完成并提交时,或是完成并回滚,但没有执行 flushCache=true 的 insert/delete/update 语句时,缓存会获得更新。

Mybatis---简单缓存了解相关推荐

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

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

  2. Mybatis 二级缓存简单示例

    简介 简单接收Mybatis中二级缓存的使用示例 概览 主要部分如下: 引入Maven依赖 SpringBoot配置文件配置.建库与初始化SQL语句 实体类与Mapper编写 测试 Maven依赖 完 ...

  3. springboot mybatis 事务_SpringBoot 下 Mybatis 的缓存

    "IT魔幻屋"致力于让你遇见更好的自己! 说起 mybatis,作为 Java 程序员应该是无人不知,它是常用的数据库访问框架.与 Spring 和 Struts 组成了 Java ...

  4. 通过源码分析MyBatis的缓存

    前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ MyBatis缓存介绍 首先看一段wiki上关于MyBatis缓存的介绍 ...

  5. Mybatis二级缓存原理

    记录是一种精神,是加深理解最好的方式之一. 最近看了下Mybatis的源码,分析了二级缓存的实现方式,在这里把他记下来.虽然这不复杂,对这方面的博客也有很多,写的也很好.但我坚信看懂了是其一,能够教别 ...

  6. (转)mybatis一级缓存二级缓存

    一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用同一个SqlSess ...

  7. Mybatis一级缓存、二级缓存

    一级缓存:SqlSession mybatis一级缓存是指在内存中开辟一块区域,用来保存用户对数据库的操作信息(sql)和数据库返回的数据,如果下一次用户再执行相同的请求,那么直接从内存中读数数据而不 ...

  8. mybatis一级缓存二级缓存

    一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用同一个SqlSess ...

  9. 10、mybatis中缓存的使用

    对于初学者,如何进行mybatis的学习呢?我总结了几点,会慢慢的更新出来.首先大家需要了解mybatis是什么.用mybatis来做什么.为什么要用mybatis.有什么优缺点:当知道了为什么的时候 ...

  10. Spring Boot之基于Redis实现MyBatis查询缓存解决方案

    转载自 Spring Boot之基于Redis实现MyBatis查询缓存解决方案 1. 前言 MyBatis是Java中常用的数据层ORM框架,笔者目前在实际的开发中,也在使用MyBatis.本文主要 ...

最新文章

  1. AI一分钟 | 比特大陆递交招股书,募资用于AI芯片研发;泰晤士2019全球大学排行榜:清华列亚洲第一...
  2. android绘制高亮区域,实现高亮某行的RecyclerView效果
  3. 6-uboot relocation介绍
  4. Thrift异步IO服务器源码分析
  5. 前端er怎样操作剪切复制以及禁止复制+破解等
  6. 《集体智慧编程》笔记(1 / 12):集体智慧导言
  7. java判断线程是否wait_Java并发编程之线程间通讯(上)wait/notify机制
  8. 【例题+习题】【数值计算方法复习】【湘潭大学】(六)
  9. mysql 知识_关于mysql基础知识的介绍
  10. 8Python全栈之路系列之Django Cookie 与Sessi
  11. 程序猿,是如何逆袭的
  12. paip.基于navicate mysql的自动化报表工具总结
  13. 杭电oj刷题第一阶段答案
  14. Android 消息机制之深入学习MessageQueue
  15. html遮罩层样式,遮罩层样式
  16. github在线简历
  17. python导入库关键词_怎么样导入RobotFramework 自定义关键字(库文件)
  18. Java读写Excel原来这么简单
  19. cad镜像后标注尺寸数字反了_CAD中镜像文字后,文字反转了,可以这样轻松调整过来...
  20. matlab C++ 实现对手机拍摄的机读卡结果识别

热门文章

  1. python飞机大战爆炸效果实现_Python飞机大战实战项目案例
  2. oracle 停掉job,oracle 如何停job
  3. 欢聚时代java面试面经_面试经历—广州YY(欢聚时代) | 学步园
  4. SW中如何将拉伸的物体转化为钣金件
  5. 学习笔记10:程序设计基础(C)实验(函数)
  6. PgRGGmiCst
  7. linux桌面版无线鼠标不能用,无线鼠标没反应怎么回事 无线鼠标没反应解决方法...
  8. Linux -- 代理服务器(Squid Server)的配置与应用1
  9. google的搜索技巧(很全的)
  10. mac 打开网页慢_老Mac电脑打开网页慢怎么办