1、介绍
MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地
配置和定制。 为了使它更加强大而且易于配置,我们对 MyBatis 3 中的缓存实现进行了许多改进。
默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据
进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行:
1
当添加上该标签之后,会有如下效果:
映射语句文件中的所有 select 语句的结果将会被缓存。
映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来
清除不需要的缓存。
缓存不会定时进行刷新(也就是说,没有刷新间隔)。
缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。
缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以
安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
在进行配置的时候还会分为一级缓存和二级缓存:
一级缓存:线程级别的缓存,是本地缓存,sqlSession级别的缓存。
二级缓存:全局范围的缓存,不止局限于当前会话。
2、一级缓存的使用
一级缓存是sqlsession级别的缓存,默认是存在的。


一级缓存默认是存在的,所以只需要注意一下一级缓存可能会失效的情况就行;
2、二级缓存
二级缓存是全局作用域缓存,默认是不开启的,需要手动进行配置。
Mybatis提供二级缓存的接口以及实现,缓存实现的时候要求实体类实
现Serializable接口,二级缓存在sqlSession关闭或提交之后才会生效。

步骤:
1、全局配置文件中添加如下配置:

当然第一步也可以省略,因为默认会开启二级缓存,将value设置为false就会自动关闭二级缓存

2、需要在使用二级缓存的映射文件出使用标签标注
3、实体类必须要实现Serializable接口




当然二级缓存在实际开发中很少会用到,所以一般会关掉二级缓存,只需要掌握怎么关闭二级缓存的步骤就行
2、缓存的属性
eviction:表示缓存回收策略,默认是LRU
LRU:最近最少使用的,移除最长时间不被使用的对象
FIFO:先进先出,按照对象进入缓存的顺序来移除
SOFT:软引用,移除基于垃圾回收器状态和软引用规则的
对象
WEAK:弱引用,更积极地移除基于垃圾收集器状态和弱引
用规则的对象
flushInternal:刷新间隔,单位毫秒
默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语
句时刷新
size:引用数目,正整数
代表缓存最多可以存储多少个对象,太大容易导致内存溢出
readonly:只读,true/false
true:只读缓存,会给所有调用这返回缓存对象的相同实
例,因此这些对象不能被修改。
false:读写缓存,会返回缓存对象的拷贝(序列化实现),
这种方式比较安全,默认值

缓存的属性注意一下即可;
mybatis一级缓存和二级缓存的区别:

1)一级缓存 Mybatis的一级缓存是指SQLSession,一级缓存的作用域是SQlSession, Mabits默认开启一级缓存。 在同一个SqlSession中,执行相同的SQL查询时;第一次会去查询数据库,并写在缓存中,第二次会直接从缓存中取。 当执行SQL时候两次查询中间发生了增删改的操作,则SQLSession的缓存会被清空。
每次查询会先去缓存中找,如果找不到,再去数据库查询,然后把结果写到缓存中。 Mybatis的内部缓存使用一个HashMap,key为hashcode+statementId+sql语句。Value为查询出来的结果集映射成的java对象。 SqlSession执行insert、update、delete等操作commit后会清空该SQLSession缓存。
2)二级缓存 二级缓存是mapper级别的,Mybatis默认是开启二级缓存的,但是没有实现。 第一次调用mapper下的SQL去查询用户的信息,查询到的信息会存放该mapper对应的二级缓存区域。 第二次调用namespace下的mapper映射文件中,相同的sql去查询用户信息,会去对应的二级缓存内取结果。

MyBatis基于XML的使用——缓存相关推荐

  1. Mybatis-06【MyBatis基于XML的详细使用——缓存】

    MyBatis基于XML的详细使用--缓存1.介绍2.一级缓存的使用3.二级缓存1. 缓存的使用2. 缓存的属性3. 二级缓存的作用范围4. 整合第三方缓存 1.介绍 MyBatis 内置了一个强大的 ...

  2. Mybatis基于XML配置SQL映射器(二)

    Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档  sysUse ...

  3. MyBatis基于XML的详细使用——缓存

    目录 介绍 一级缓存的使用 特性 二级缓存 缓存的使用 缓存的属性 二级缓存的作用范围: 特性 介绍 MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制. 为了使它更加强大 ...

  4. Mybatis基于XML配置SQL映射器(一)

    Durid和Mybatis开发环境搭建 SpringBoot搭建基于Spring+SpringMvc+Mybatis的REST服务(http://www.cnblogs.com/nbfujx/p/76 ...

  5. spring整合mybatis基于xml配置

    数据库 /* Navicat MySQL Data Transfer Source Server         : mysql Source Server Version : 50549 Sourc ...

  6. mybatis基于XML(二)

    1.创建MySQL数据库:mybatisDemo和表:user 2.建立一个Java工程,并导入相应的jar包,具体目录如下 3.在 MyBatisTest 工程中添加数据库配置文件 mybatis- ...

  7. SpringBoot+MyBatis 基于xml实现多表查询的两种方式

    1.创建SpringBoot项目,导入依赖 <dependencies><dependency><groupId>org.springframework.boot& ...

  8. mybatis笔记-04【MyBatis基于XML的详细使用——高级结果映射】

    1.联合查询 emp.java 1 package cn.tulingxueyuan.pojo; 2 3 import java.time.LocalDate; 4 5 /*** 6 * @Autho ...

  9. mybatis mapper.xml 文件共用_MyBatis 缓存原来是这么一回事儿!| 原力计划

    作者 | Lw中责编 | 夕颜出品 | CSDN(ID:CSDNnews) 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其 ...

最新文章

  1. Tensorflow保存神经网络参数有妙招:Saver和Restore
  2. zoj3802:easy 2048 again(状压dp)
  3. 老九门略--盗墓笔记老九门是哪九门(后附最新老九门电视剧百度云地址--不时更新)
  4. 串口服务器485转以太网
  5. html取消波浪线,PPT文字下划波浪线如何去掉?
  6. Maccms8.x 命令执行漏洞分析
  7. 计算机 工具 文件夹 找不到,电脑附件中的“画图工具”找不到了,怎么办?
  8. 2021年终总结:鲜花怒马少年时,一日看尽长安花
  9. git push报错: Push rejected
  10. 【凯子哥带你学Framework】Activity启动过程全解析
  11. protocol buffer生成C语言的实现
  12. 傅里叶变换、拉普拉斯变换、z变换之间的联系
  13. 广告机解决方案/安防监控网络方案/医疗方案
  14. solidworks显示无法连接到服务器,SOLIDWORKS Electrical解决方法:无法连接协同服务器...
  15. docker更换镜像源
  16. C语言中的循环语句(while、dowhile、for)
  17. IBM WebSphere MQ安装及使用教程
  18. 楼宇内的一个计算机网络属于,网络技术期末考试题及答案
  19. 《MLB棒球创造营》:棒球团建·一球入魂
  20. 算法为什么那么难?——算法学习秘籍

热门文章

  1. 搜索引擎优化排名方法
  2. 用python每日更换“必应图片”为“桌面壁纸”
  3. 信息化发展与应用的新特点
  4. element组件树形控件el-tree点击展开节点,节点重影
  5. 目前企业的云计算转型,主要可以划分为哪四个阶段?
  6. 对ArrayList集合里面数据排序
  7. AD练习笔记 USB-TTL转换器
  8. 2021-2022学年广州市南武中学七年级第一学期期中考试英语试题
  9. 爬虫中requests模块中session的实战应用
  10. LeetCode数据库题目汇总一(附答案)