mybatis查询缓存
一级缓存针对每个sqlSession进行缓存,sqlSession销毁,一级缓存就不存在. ,使用Map存储了sql执行查询结果集(java对象)
二级缓存针对每个map的namespace进行缓存. mybatis程序运行起来二级缓存的数据结构就创建出来,直到mybatis程序停止二级缓存数据结构销毁
map中存储了sql执行查询的结果集(java对象) 二级缓存是在configeration的全局数据结构当中
要想执行二级缓存sqlSession必须关闭.
1.1 一级缓存原理
如果执行增删改操作,执行commit,会清空sqlsession缓存.
跟踪源代码,一级缓存的区域:
1.2 二级缓存原理
如果sqlsession3执行增删改,执行commit后,UserMapper下的所有缓存全部清空.
1.开启二级缓存
mybatis对一级缓存是默认支持,二级缓存需要开启
打开总开关:在核心配置文件SqlMapConfig.xml加入:<setting name="cacheEabled " value="true">
打开mapper的二级开关:在mapper.xml中加入:<cache/>
2 对象序列化
mybatis支持使用第三方缓存框架实现二级缓存数据的存储,要求对象必须实现序列化(实体类 implements Serializable)。
通过源码跟踪:
设置statement是否二级缓存
useCache=true表示要二级缓存,一般要对查询进行二级缓存。
useCache=false,查询该 statement不进行二级缓存,针对那些查询非常频繁的语句,信息的变化性较高,可以将useCache设置false不进行二级缓存。
刷新缓存
针对insert、update、delete这些statement设置flushCache="true" 表示执行commit就清空二级缓存,如果设置flushCache="false",执行操作也不清空缓存。
一般情况下需要设置flushCache="true" ,为了避免查询出脏数据。
其它的参数
flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。
size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024。
readOnly(只读)属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。
mybatis查询缓存的更多相关文章
- Mybatis学习记录(七)----Mybatis查询缓存
1. 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sql ...
- 八 mybatis查询缓存(一级缓存,二级缓存)和ehcache整合
1 查询缓存 1.1 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存.
- Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6956206.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(七)——My ...
- mybatis查询缓存——(十三)
1. mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存.
- apache ignite系列(九):使用ddl和dml脚本初始化ignite并使用mybatis查询缓存
博客又断了一段时间,本篇将记录一下基于ignite对jdbc支持的特性在实际使用过程中的使用. 使用ddl和dml脚本初始化ignite 由于spring-boot中支持通过spring.dataso ...
- (十二)mybatis 查询缓存
目录 什么是查询缓存 图解查询缓存 一级缓存 二级缓存 禁用二级缓存 刷新缓存 二级缓存应用场景 二级缓存局限性 什么是查询缓存 mybatis 在查询数据的时候,会将数据存储起来,下次再次查询相同的 ...
- mybatis 查询缓存问题
<settings> <setting name="localCacheScope" value="STATEMENT" /> < ...
- 【JAVA - SSM】之MyBatis查询缓存
为了减轻数据压力,提高数据库的性能,我们往往会需要使用缓存.MyBatis为我们提供了一级缓存和二级缓存. (1)一级缓存是SqlSession级别的缓存,在操作数据库的时候需要创建一个SqlSess ...
- 【JavaEE】之MyBatis查询缓存
为了减轻数据压力,提高数据库的性能,我们往往会需要使用缓存.MyBatis为我们提供了一级缓存和二级缓存. (1)一级缓存是SqlSession级别的缓存,在操作数据库的时候需要创建一个SqlSess ...
随机推荐
- asp get与post获取的区别
1.HTTP请求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP请求中, ...
- MySQL prompt命令
修改提示符,设置后挺方便的 例如: 几个好用的参数 \d 当前数据库 \u 当前用户 \h 当前主机 更多参数可以参考mysol官方文档 参考文档:https://dev.mysql.com/doc/ ...
- 版本控制器之SVN
1.开发中的实际问题 1.1 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流——需求之一:备份! 1.2 这个项目中需要一个很复杂的功 ...
- python使用元类
原文:https://blog.csdn.net/youzhouliu/article/details/51906158 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义 ...
- 小任务之Canvas绘制时钟
背景图的绘制(大圆.数字.小圆点) 掌握基础知识:圆的绘制(arc方法),关于圆的弧度的计算,数学中关于sin cos的用法 圆的弧度为2*Math.PI 12个数字分得弧度每个为2*Math.PI/ ...
- csharp:Convert Image to Base64 String and Base64 String to Image
/// <summary> /// 图像转成二进制数组 /// </summary> /// <param name="imageIn">< ...
- CSS3及JS简单实现选项卡效果(适配手机端和pc端)
想要适配手机端和pc端,有几种简单的方法,本人使用的是百分比分配的方法. *{ padding: 0; margin: 0; } body,html{ width: 100%; height: 100 ...
- Java 开源博客 Solo 1.4.0 发布 - 简化
Solo 1.4.0 正式发布了!这个版本主要是简化了配置项,修复了一些缺陷并改进了很多细节体验,感谢一直以来关注和支持我们的朋友! 只需一个命令即可启动(不需要安装数据库.部署容器):也可以通过 w ...
- ImageNet download
Download Original Images Note: On Feb 8, 2014, our terms of access changed along with the APIs/URLs ...
- OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream-四种复制方式-单层文件夹复制
字节流两套: java.lang.Object--java.io.OutputStream--java.io.FileOutputStream java.lang.Ob ...