Mybatis-学习笔记(7)缓存机制
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)缓存机制相关推荐
- Mybatis学习笔记18 - 缓存
两级缓存: 一级缓存:(本地缓存):sqlSession级别的缓存.一级缓存是一直开启的:SqlSession级别的一个Map 数据库同一次会话期间查询到的数据会放在本地缓存中.以后如果需要获取相同的 ...
- 超详细Mybatis学习笔记(可供下载)
文章目录 1.简介 2.第一个Mybatis程序 搭建环境 编写代码 测试 3.CRUD(增删改查) 3.1.几个属性 3.2.select 3.3.insert 3.4.delete 3.5.upd ...
- Mybatis学习笔记——第一天
Mybatis学习打卡 Mybatis学习笔记---第一天 Mybatis笔记 第一天 一.引言 1. 现有Jdbc的缺陷 2. Mybatis框架 3. 搭建环境 1) 引入jar包 2) 引入配置 ...
- mybatis学习笔记(13)-延迟加载
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...
- MyBatis学习笔记(1)—使用篇
MyBatis学习笔记(1)-使用篇 MyBatis学习笔记(2)-映射关系篇 MyBatis学习笔记(3)-高级映射之一对一映射 Mybatis学习笔记(4)-高级映射之一对多映射 Mybatis学 ...
- mybatis学习笔记(7)-输出映射
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...
- mybatis学习笔记(3)-入门程序一
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...
- MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三
前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...
- ant的下载与安装——mybatis学习笔记之预备篇(一)
看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...
- mybatis学习笔记--常见的错误
原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...
最新文章
- 软件测试黑盒测试实验心得_软件测试的基础知识
- 揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性
- VTK:绘制Arrow箭头用法实战
- IDEA配置Struts框架
- python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口
- Docker学习文档之一 安装软件-Linux环境
- [原创]windows下unix2dos dos2unix 文本文件批量转换工具
- 使用Easy Duplicate Photo Finder for Mac如何查找重复的图片?
- Linux socket等于0,Linux系统环境下的Socket编程详细解析
- 什么是Ruby之道?
- 紧急通知发布解决方案(互亿无线)
- Android刷机备忘录
- 转载 | 深度学习中的遥感影像数据集
- 网易云信Demo-注册400
- 数据分析——“鲍鱼的年龄”数据集
- 内容感知、AI融合:让实景三维看山是山,看水是水
- 基于机器学习进行多阶段全零块检测
- python划分有限元网格_关于有限元网格划分
- 如何给pdf插入文字
- 华唯鑫能油解读厨房燃料分类:液化气、甲醇、白油、生物油等等种类多样,各有不同