Java日记之MyBatis缓存 , 整合ehcache


前言

做过web开发的都知道 , 浏览器缓存是个让人头大的问题 , 开发过程中需要频繁清空缓存 , 然而对于mybatis框架来说 , 缓存却是可用提高效率的工具

一、哪里会用到缓存?

对于一些需要频繁查询 , 但是内容雷同的内容 , 为了节约资源 , MyBatis会把它存入缓存中 , 例如菜单 , 和"我的" 内容

当然在mybatis中 , 缓存也是分级别的 .
一级缓存 : sqlSession级别 , 存在于与数据库的一次对话
二级缓存 : namespace级别的全局缓存 , 每个namespace都会有一个二级缓存 , 如果一级缓存被关闭了 , 内容就会转进二级缓存

mybatis的缓存底层都是map类型 , 这就为下面的使用第三方缓存埋下伏笔

二、通过日志查看一级缓存的工作

1.搭建环境并写好查询语句

2.查询两个相同的内容

在这里插入图片描述

3.运行并查看控制台日志

在这里插入图片描述

4.结论

这里我们查询了两次100002的ID , 在控制台我们能发现 , 只执行了一次SQL查询. 但是在输出查询结果的时候 , 输出的是两条结果.
这说明 , 我们的mybatis查询了两次, 但是只有一次是在数据库了做的查询 , 另外的一次相同的查询是在一级缓存中查询的.


二. 二级缓存

1.显式地开启二级缓存

注意 : 1.在显式开启二级缓存的时候 , 我们需要把settings标签放在mybatis配置文件的最上面(configuration中)
2.虽然我们默认是开启二级缓存的 , 但是为了防止因为版本更替造成的修改 , 我们应该遵循显式开启原则
3.如果关闭了二级缓存 , 但是并不会关闭一级缓存

	<settings>
		<setting name="cacheEnable" value="true"/>
	</settings>

2.二级缓存的策略

讲一下useCache,flushCache

1.useCache : 是否使用二级缓存
2.flushCache : 在增删改执行完成后 , 刷新缓存 ,默认为false , 如果打开 , 在查询两个相同记录时 , 会查两次

3.缓存顺序

在使用过程中 , mybatis会先查看二级缓存 , 再查看一级缓存 , 如果都没有 , 最后才回去数据库查

三. 整合ehcache缓存

上面说了 , mybatis使用的时map存储缓存, 并不是专业的缓存机制 , 因此,mybatis留下了标准化接口给其它专业的缓存使用 , 如ehcache

操作顺序如下图 :
GitHub搜mybatis-ehcache
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
下载完成后 , 在工程中的lib包需要以下内容 :
在这里插入图片描述

---------------------------------------------分割线-----------------------------------
接下来都是在IDE中进行的操作

1.在mapper.xml文件中 , 我们需要打上这么一个标签 , 指明使用的缓存

<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>

2.创建ehcache.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false">
 <!-- 磁盘保存路径 -->
 <diskStore path="自己选一个磁盘建文件夹" />
 
 <defaultCache 
   maxElementsInMemory="100" 
   maxElementsOnDisk="10000000"
   eternal="false" 
   overflowToDisk="true" 
   timeToIdleSeconds="120"
   timeToLiveSeconds="120" 
   diskExpiryThreadIntervalSeconds="120"
   memoryStoreEvictionPolicy="LRU">
 </defaultCache>
</ehcache>

3.在其它.xml文件中 , 我们并不需要再去重新写缓存 , 而是使用cache-ref标签引入命名空间实现共享缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值