博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis缓存
阅读量:4507 次
发布时间:2019-06-08

本文共 797 字,大约阅读时间需要 2 分钟。

mybatis提供查询缓存,用于减轻数据库压力,提高性能。

一级缓存

一级缓存是sqlSession级别的,不同sqlSession之间的缓存数据区域相互不影响。在构造session对象时使用HashMap数据结构的内存区域存储缓存数据。 

一级缓存默认是开启的。 
sqlSession执行commit后会清空一级缓存,避免脏读。

二级缓存

二级缓存是mapper级别的,不同sqlSession可以共享同一个mapper中sql的缓存数据。 

二级缓存默认不是开启的,需要通过setting配置开始

禁用二级缓存

通过上面的配置可以全局禁用二级缓存 

在statement中设置 useCache=false 可以禁止当前sql语句的二级缓存,该配置默认是true。

二级缓存的局限性

二级缓存对细粒度的数据级别的缓存实现不好,因为是mapper级别的,同一个namespace下的数据缓存都会被刷新。

flushCache和useCache的使用

当为select语句时: 

flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。 
useCache默认为true,表示会将本条语句的结果进行二级缓存。 
当为insert、update、delete语句时: 
flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。 
useCache属性在该情况下没有。

一级缓存问题处理

怎么禁用一级缓存的效果

sql级别

flushCache="true"

全局FlushCache

<setting name="localCacheScope" value="STATEMENT"/>

mybaitis插件 

具体参考:

转载于:https://www.cnblogs.com/f-anything/p/8707541.html

你可能感兴趣的文章
java -jstack
查看>>
C#中线程调用带有参数的方法
查看>>
单片机的模块化编程
查看>>
[转]从3个IT公司里学到的57条经验
查看>>
Test指令
查看>>
c++11——可变参数模板
查看>>
from imp import * 重新加载导入的模块reload
查看>>
二叉树三种遍历调试运行版
查看>>
关于PHP、python使用的CRC32函数
查看>>
JS自动关闭授权弹窗,并刷新父页面
查看>>
c#语言几种常见循环代码
查看>>
SQL多表连接查询(详细实例)
查看>>
Http中涉及到的知识点总结
查看>>
adb命令记录
查看>>
swift初学日志
查看>>
Eclipse上GIT插件_客户端配置
查看>>
JavaScript浏览器对象之二Document对象
查看>>
js 乘除算法 浮点 精度解决办法
查看>>
sqlserver2005版本的mdf文件,还没有log文件,
查看>>
错误“该伙伴事务管理器已经禁止了它对远程/网络事务的支持”解决方案
查看>>