| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Mybaits基础(三)缓存 -> 正文阅读 |
|
[Java知识库]Mybaits基础(三)缓存 |
1、缓存的设置与使用在Mybaits的jar包中,所有的缓存都需要实现一个接口org.apache.ibatis.cache.Cache,它具有最基础的一个实现类PerpetualCache。除此之外,Mybaits还使用了装饰器模式,在decorators文件夹内有一些装饰器,在不改变原有对象的基础上,增强扩展其功能。
这些装饰类的使用是在对应的表Mapper文件中,使用cache标签内部的参数进行设置。?
2、一级缓存一级缓存又叫本地缓存,默认开启,作用域是session(会话级别),这个session实际上是SQLSession,SQLSession有一个默认实现DefaultSqlSession,在DefaultSqlSession中,关键的属性有两个。
configuration是全局唯一的配置,所以只能在一个session中进行使用的一级缓存应该放Executor 中。 那么在BaseExecutor 中确实包含有缓存。
因此,作为SQLSession的一个属性,一级缓存是不能跨session的,只能在一个session内进行读取。 一级缓存有缓存失效的情况,当同一个session内执行更新操作,一级缓存会失效,这时再去读取就会让缓存失效。 一级缓存有脏数据的问题,因为一级缓存不能跨session,所以当一个session有一级缓存,另一个session更新了对应数据后,就会导致第一个session内的缓存不知道数据已经被更新,导致出现脏数据。 除此之外,如果非要关闭一级缓存,可以在settings标签中设置。当localCacheScope设置为Session时代表作用域是session,设置为Statement时代表作用域是statement,也就起不到缓存效果,算是关闭了。
3、二级缓存二级缓存的作用域是namespace,namespace就是命名空间,mapper文件中有一个标签就是namepace,在这一个mapper文件下的所有语句共享一个命名空间,无论是不是一个SQLSession。 二级缓存的维护对象是CachingExecutor,因为二级缓存的作用范围大于一级缓存,所以查询时需要先命中二级缓存,再命中一级缓存,最后查询数据库。 ?在spring-mvc.xml文件的settings标签下,有一个内容,只有cacheEnabled设置为false时,二级缓存才不生效,无论是true还是不设置都是生效的。
?想要二级缓存生效,还需要在对应的mapper的xml文件中增加标签
在这个标签中,每一个属性都有自己的配置:
这样,在这个namespace中,所有的select的结果都能被二级缓存进行缓存,更新等操作则会清除缓存。如果某一个select的结果不想被缓存,可以在select标签中增加属性 useCache="false"
如果两个namespace想要共用一个二级缓存,可以在其中一个namespace中增加一个标签,cache-ref,这样就可以将共用缓存了。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:04:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |