12-Mybatis 缓存
一、Mybatis 一级缓存
1.证明一级缓存的存在
一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在。
User findById(Integer userId);
<!-- 根据 id 查询 --><select id="findById" resultType="cn.oesoft.mybatis01.domain.User" parameterType="_int">select *from userwhere id = #{uid}</select>
@Testpublic void testFindById() {User user = userDao.findById(41);System.out.println("第一次查询的用户:"+user);User user2 = userDao.findById(41);System.out.println("第二次查询用户:"+user2);System.out.println(user == user2);}
2.一级缓存的分析
一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。
3.测试一级缓存的清空
/*** 测试一级缓存清空*/@Testpublic void testFirstLevelCache() {User user1 = userDao.findById(41);System.out.println(user1);session.close();//再次获取 SqlSession 对象session = factory.openSession();//session.clearCache();//此方法也可以清空缓存userDao = session.getMapper(IUserDao.class);User user2 = userDao.findById(41);System.out.println(user2);System.out.println(user1 == user2);}
/*** 测试缓存的同步*/@Testpublic void testClearlCache() {//1.根据 id 查询用户User user1 = userDao.findById(41);System.out.println(user1);//2.更新用户信息user1.setUsername("update user clear cache");user1.setAddress("北京市海淀区");userDao.updateUser(user1);//3.再次查询 id 为 41 的用户User user2 = userDao.findById(41);System.out.println(user2);System.out.println(user1 == user2);}
二、Mybatis 二级缓存
1.二级缓存结构图
2.二级缓存的开启与关闭
a.第一步:在 SqlMapConfig.xml 文件开启二级缓存
<!-- 开启二级缓存的支持 --><setting name="cacheEnabled" value="true"/>
b.第二步:配置相关的 Mapper 映射文件
<cache>标签表示当前这个 mapper 映射将使用二级缓存,区分的标准就看 mapper 的 namespace 值.
<mapper namespace="cn.oesoft.mybatis01.dao.IUserDao">
<!-- 开启二级缓存的支持 -->
<cache></cache>
</mapper>
c.第三步:配置 statement 上面的 useCache 属性
<!-- 根据 id 查询 -->
<select id="findById" resultType="user" parameterType="int" useCache="true">
select * from user where id = #{uid}
</select>
3.二级缓存测试
/*** 测试二级缓存*/@Testpublic void testSecondLevelCache(){SqlSession sqlSession1 = factory.openSession();IUserDao dao1 = sqlSession1.getMapper(IUserDao.class);User user1 = dao1.findById(41);System.out.println(user1);sqlSession1.close();//一级缓存消失SqlSession sqlSession2 = factory.openSession();IUserDao dao2 = sqlSession2.getMapper(IUserDao.class);User user2 = dao2.findById(41);System.out.println(user2);sqlSession2.close();System.out.println(user1 == user2);}
4.二级缓存注意事项
12-Mybatis 缓存相关推荐
- 实际测试例子+源码分析的方式解剖MyBatis缓存的概念
前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:79 ...
- MyBatis-学习笔记12【12.Mybatis注解开发】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- mybatis缓存二级缓存_MyBatis缓存与Apache Ignite的陷阱
mybatis缓存二级缓存 一周前,MyBatis和Apache ignite 宣布支持apache ignite作为MyBatis缓存(L2缓存). 从技术上讲,MyBatis支持两个级别的缓存: ...
- MyBatis缓存与Apache Ignite的陷阱
一周前,MyBatis和Apache ignite 宣布支持apache ignite作为MyBatis缓存(L2缓存). 从技术上讲,MyBatis支持两个级别的缓存: 本地缓存,默认情况下始终启用 ...
- 给我五分钟,带你彻底掌握 MyBatis 缓存的工作原理
前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的缓存,各种中间件如Redis也是用来充当缓存的作用,编程语言中又可以利用内存来作为缓存.自然的,作为一款优秀的ORM ...
- redis的基本操作And数据持久化方式以及redis实现mybatis缓存
Redis 1.NoSql # NoSql(Not Only Sql),不仅仅是sql,泛指非关系型数据库 2.NoSql的诞生 随着互联网web2.0网站的兴起,传统的关系型数据库在高并发和特大规模 ...
- Mybatis 一级缓存,Mybatis 二级缓存,Mybatis 缓存失效
Mybatis 一级缓存,Mybatis 二级缓存,Mybatis 缓存失效 ================================ ©Copyright 蕃薯耀 2021-06-24 ht ...
- mybats实操-前期入门写法分析,SqlSessionFactory 获取SqlSession, 系统核心配置文件 mybatis-config.xml,SQL映射XML文件,MyBatis缓存
标题 偏向这一块的配置 打个预防针 尽量别用中文路径 尤其配置文件 1.导入数据库(smbms_db.sql) 下载maven并且配置环境变量 去IDEA配置好maven 以后maven项目直接用 m ...
- MyBatis复习笔记6:MyBatis缓存机制
MyBatis缓存机制 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率. MyBatis系统中默认定义了两级缓存. 一级缓存和二级缓存. 默认情 ...
- Mybatis 缓存系统源码解析
Mybatis 缓存系统源码解析 转载于:https://juejin.im/post/5bfa50905188251d0920006c
最新文章
- linux xampp eclipse xdebug 无法进入断点
- 没好域名?就得给自己换个名
- Java集合:HashMap线程不安全?有哪些表现?
- [系统集成] CI持续集成项目简介
- 提取Java集合的元素-Java 8方法
- 【Python CheckiO 题解】Striped Words
- mysql8.0 tar安装_CentOS7安装MySQL8.0 tar包
- 动态规划——乘积最大子数组(Leetcode 152)
- 洞仙歌·冰肌玉骨 [宋] 苏轼
- 部分网站为什么上不去_天机SEO:分析网站收录与排名的重要因素
- 让 Chrome 在后台运行
- ekho嵌入式Linux移植全过程
- NOI OJ 1.3 13:反向输出一个三位数 C语言
- 计算机打印机端口号,网络打印机端口号.doc
- 实现webIM技术小结——websocket IM原理篇
- HDUOJ---携程员工运动会场地问题
- R语言使用plot函数可视化数据散点图,使用title函数为可视化图像设置自定义标题名称、自定义adj参数将标题向右侧移动
- [USACO13NOV]挤奶牛Crowded Cows(洛谷 P3088)
- 软件测试之测试程序开发
- idea连接数据库快速生成pojo类
热门文章
- html按钮的下拉菜单,按钮下拉菜单
- 【Elasticsearch】 es watcher 视频 笔记
- 【高并发】JUC中等待多线程完成的工具类CountDownLatch
- 【ElasticSearch】ElasticSearch immense term错误
- 95-180-050-源码-Watermark-允许固定数量延迟的分配器(BoundedOutOfOrdernessTimestampExtractor)
- 95-235-070-源码-task-OneInputStreamTask
- java基础工具VisualVM介绍与详细使用
- 广东省计算机考试图片大小,广东省计算机等级考试(20190423051419).doc
- SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
- 设计一个安全对外的API接口,需要考虑哪些方面?