1、一级缓存

SqlSession级别的缓存,使用HashMap存储缓存数据,不同的SqlSession之间的缓存数据区域(HashMap)互不影响。

一级缓存的作用域是SqlSession范围(强调是不是同一个SqlSession),当在同一个SqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存中,第二次查询时会从缓存中获取数据,不再去底层数据库查询(如下当DML操作又会重查)。

如果SqlSession执行DML操作(insert、delete、update),并commit提交到数据库,Mybatis则会清空SqlSession中的一级缓存,目的是刷新缓存。当SqlSession结束(调用SqlSessionclose()方法)后该SqlSession中的一级缓存也就不存在了。

Mybatis默认开启一级缓存,不需要进行任何设置。

2、二级缓存

mapper级别的缓存,二级缓存是多个SqlSession共享的。多个SqlSession使用同一个mapper的sql语句去操作数据库,得到的数据会存在二级缓存区域,同样使用的是HashMap进行数据存储。

mapper级别的缓存,其作用域是mapper的同一个namespace。不同的SqlSession执行同一个mapper下的namaspace的sql语句,且向sql中传递的参数也相同,第一次执行完会将数据写到缓存,第二次查询会从缓存中获取数据,不再去底层数据库查询。

mapper级别的缓存需要使用setting全局参数设置开启。配置方式如下:

<!-- 步骤1、Mybatis配置文件中开启二级缓存 --><settings><setting name="logImpl" value="LOG4J2"/><!-- 开启二级缓存 -->
    <setting name="cacheEnabled" value="true"/></settings>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 步骤2、mapper中开启二级缓存 -->
<mapper namespace="com.lfy.mapping.UserMapper"><!-- 开启二级缓存 回收策略为先进先出自动刷新时间60s最多缓存512个引用对象只读--><cache eviction="LRU"  flushInterval="60000" size="512" readOnly="true"/>     ...
</mapper>

使用二级缓存,与查询结果映射的Java对象必须实现java.io.Serializable接口的序列化、反序列化操作,如果存在父类,其成员都需要实现序列化接口。实现序列化接口是为了对缓存数据进行序列化和反序列化操作,因为二级缓存数据存储介质多种多样,不一定在内存,有可能是硬盘或者远程服务器。

同一个SqlSession,多次执行同一个sql语句,会先查找一级缓存,如果没有,但开启了二级缓存功能,将会去二级缓存中查找。不同的SqlSession执行同一个namespace下的sql,只能去二级缓存查找先了。

在select语句中使用“useCache=false”,则会禁用当前语句的二级缓存。select语句默认开启二级缓存。

转载于:https://www.cnblogs.com/ZeroMZ/p/11419621.html

Mybatis-学习笔记(7)缓存机制相关推荐

  1. Mybatis学习笔记18 - 缓存

    两级缓存: 一级缓存:(本地缓存):sqlSession级别的缓存.一级缓存是一直开启的:SqlSession级别的一个Map 数据库同一次会话期间查询到的数据会放在本地缓存中.以后如果需要获取相同的 ...

  2. 超详细Mybatis学习笔记(可供下载)

    文章目录 1.简介 2.第一个Mybatis程序 搭建环境 编写代码 测试 3.CRUD(增删改查) 3.1.几个属性 3.2.select 3.3.insert 3.4.delete 3.5.upd ...

  3. Mybatis学习笔记——第一天

    Mybatis学习打卡 Mybatis学习笔记---第一天 Mybatis笔记 第一天 一.引言 1. 现有Jdbc的缺陷 2. Mybatis框架 3. 搭建环境 1) 引入jar包 2) 引入配置 ...

  4. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  5. MyBatis学习笔记(1)—使用篇

    MyBatis学习笔记(1)-使用篇 MyBatis学习笔记(2)-映射关系篇 MyBatis学习笔记(3)-高级映射之一对一映射 Mybatis学习笔记(4)-高级映射之一对多映射 Mybatis学 ...

  6. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  7. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  8. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  9. ant的下载与安装——mybatis学习笔记之预备篇(一)

    看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...

  10. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

最新文章

  1. 软件测试黑盒测试实验心得_软件测试的基础知识
  2. 揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性
  3. VTK:绘制Arrow箭头用法实战
  4. IDEA配置Struts框架
  5. python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口
  6. Docker学习文档之一 安装软件-Linux环境
  7. [原创]windows下unix2dos dos2unix 文本文件批量转换工具
  8. 使用Easy Duplicate Photo Finder for Mac如何查找重复的图片?
  9. Linux socket等于0,Linux系统环境下的Socket编程详细解析
  10. 什么是Ruby之道?
  11. 紧急通知发布解决方案(互亿无线)
  12. Android刷机备忘录
  13. 转载 | 深度学习中的遥感影像数据集
  14. 网易云信Demo-注册400
  15. 数据分析——“鲍鱼的年龄”数据集
  16. 内容感知、AI融合:让实景三维看山是山,看水是水
  17. 基于机器学习进行多阶段全零块检测
  18. python划分有限元网格_关于有限元网格划分
  19. 如何给pdf插入文字
  20. 华唯鑫能油解读厨房燃料分类:液化气、甲醇、白油、生物油等等种类多样,各有不同

热门文章

  1. 全网首发:字体引擎中字符图像的插槽
  2. 简单的事情搞复杂:挂个版本到网站,拖了几个月还没做
  3. 连范例都不跑,大哥你怎么知道你的代码正确?
  4. 终于有一次,排名没有进步
  5. 百度网盘,莫名其妙把文件删除了
  6. 龙芯机器联网时,链接建立速度有点慢
  7. VS2017编译OpenJDK,编译通过的工程包下载链接
  8. windows单实例的办法
  9. 笔记本没有网口真不方便
  10. LINUX上开发ffmpeg程序,查看链接的库