MyBatis缓存
时间:2019-10-14
本文章向大家介绍MyBatis缓存,主要包括MyBatis缓存使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、一级缓存
1.一级缓存真是存在
2.一级缓存的依据是ID+SQL字句
· 3.增删改会清空一级缓存
一级缓存案例:
一级缓存Test测试类
@Test public void test5(){ SmbmsRoleEntity allByRoleId = providerTest.getAllByRoleId(3); System.out.println(allByRoleId.getRoleName()); //使用同一个SQLSession发送 相同发的SQL并且执行大的是同一个ID //增删改:都会清空一级缓存 System.out.println("========================="); SmbmsRoleEntity allByRoleId2 = providerTest.getAllByRoleId(3); System.out.println(allByRoleId2.getRoleName()); }
一级缓存结果
使用同一SqlSession向数据库发送相同的请求时,第一条 会请求数据库发送SQL其余的不会请求数据库直接从缓存中拿数据
增删改对一级缓存的影响Test测试类
@Test public void test5(){ SmbmsRoleEntity allByRoleId = providerTest.getAllByRoleId(3); System.out.println(allByRoleId.getRoleName()); //使用同一个SQLSession发送 相同发的SQL并且执行的是同一个ID //增删改:都会清空一级缓存
System.out.println("=============修改============="); int upda = providerTest.upda("普通用户", 3); System.out.println("========================="); SmbmsRoleEntity allByRoleId2 = providerTest.getAllByRoleId(3); System.out.println(allByRoleId2.getRoleName()); }
增删改对一级缓存的影响结果
一级缓存在 增删改情况下,无论是否提交事务,都会重新执行数据库擦查询(清空缓存)
二、二级缓存
- 二级缓存不比一级缓存,需要在configuration.xml中手动开启。
- 二级缓存是全局应用级别的缓存,即使关闭了session仍能使用。
- 如果一个select标签想要局部关闭二级缓存,需要设置useCache=false
- 二级缓存不能使用注解方法配置
- 如果在执行增删改操作的过程中不刷新缓存,须设置flushCache=false
1.二级缓存不比一级缓存,需要在mybatis-.xml中手动开启
<!--开启二级缓存--> <setting name="cacheEnabled" value="true"/>
2.在小配置文件中配置cache节点
<cache/>
3.在使用到的实体类中实现Serializable接口
二级缓存测试类
@Test public void test5(){ SmbmsRoleEntity allByRoleId = providerTest.getAllByRoleId(3); System.out.println(allByRoleId.getRoleName()); //使用同一个SQLSession发送 相同发的SQL并且执行大的是同一个ID //增删改:都会清空一级缓存 System.out.println("=============修改============="); int upda = providerTest.upda("普通用户", 3); System.out.println("========================="); SmbmsRoleEntity allByRoleId2 = providerTest.getAllByRoleId(3); System.out.println(allByRoleId2.getRoleName()); }
二级测试类控制台
二级缓存在增删改情况下,如果提交事务则会清空缓存,重新查询,如果不提交事务,则获取缓存数据
原文地址:https://www.cnblogs.com/1314Justin/p/11671884.html
- ASP.NET MVC下的四种验证编程方式[续篇]
- 如何把业务问题变成机器学习的问题?
- 这算是ASP.NET MVC的一个大BUG吗?
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题) - 无监督学习 - 用户指南 | ApacheCN
- 区块链技术在非能源领域的应用场景
- Python读书笔记8
- How to debug .NET Core RC2 app with Visual Studio Code on Windows?
- 难道.NET Core到R2连中文编码都不支持吗?
- .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序
- matplotlib的基本用法(四)——设置legend图例
- TensorFlow深度学习笔记 文本与序列的深度模型
- 究竟哪里安全?加拿大VS中国治安大数据起底!意料之中还是之外?
- muduo网络库学习之EventLoop(四):EventLoopThread 类、EventLoopThreadPool 类
- 从小程序游戏开放可以看出,微信已经开始转移小程序战场了
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 使用docker数据卷持久化容器数据
- 面向初学者的Docker快速入门指南
- TypeScript:React、拖拽、实践!
- 太慢不能忍!CPU又拿硬盘和网卡开刀了!
- 懂了!VMware/KVM/Docker原来是这么回事儿
- CPU明明8个核,网卡为啥拼命折腾一号核?
- 2020-07-22-腾讯云-slb-kubeadm高可用集群搭建
- 2020-07-23-kubernetes集群使用腾讯云cbs块存储
- 十一、详解面向对象
- 十二、面向对象实战之封装拖拽对象
- 数组reduce方法的高级用法
- 十七、详解 ES6 Modules
- 超干货!为了让你彻底弄懂 MySQL 事务日志,我通宵肝出了这份图解!
- 什么情况下不能使用最坏情况评估算法的复杂度?
- Python运算符