23-Mybatis集成第三方缓存框架EHCache

本文详细介绍了如何在Mybatis中集成EHCache缓存框架,包括添加依赖、配置ehcache.xml、在mapper中引用缓存、测试案例及多namespace缓存应用。展示了实际操作步骤和清理缓存的效果。
摘要由CSDN通过智能技术生成

上一篇:22-Mybatis缓存相关设置对一级缓存和二级缓存的影响https://blog.csdn.net/fsjwin/article/details/109685932

mybatis本身有缓存的实现,但是可以集成更专业的缓存框架比如:EHCache。

1. Mybatis的缓存接口

  1. org.apache.ibatis.cache.Cache 为mybatis的缓存接口。
    在这里插入图片描述

  2. 加入依赖后的:
    在这里插入图片描述

2. Mybatis集成EHCache步骤

2.1 导入依赖

参考整合官网:http://mybatis.org/ehcache-cache/

   <!--ehcache-->
    <dependency>
      <groupId>org.mybatis.caches</groupId>
      <artifactId>mybatis-ehcache</artifactId>
      <version>1.2.1</version>
    </dependency>

2.2 配置文件ehcache.xml

在这里插入图片描述

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

    <diskStore path="D:\tmp\ehcache"/>

    <!--
       name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。
    -->
    <defaultCache
            maxElementsInMemory="10000"
            maxElementsOnDisk="10000000"
            eternal="false"
            overflowToDisk="true"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
    />
</ehcache>

2.3 配置使用EHCache StudentDao.xml

在这里插入图片描述

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

2.4 测试

  1. 测试
 @Test
    public void test26() {
        SqlSession sqlsession = MybatisUtil.getSqlsession();
        SqlSession sqlsession2 = MybatisUtil.getSqlsession();
        StudentDao studentDao = sqlsession.getMapper(StudentDao.class);
        StudentDao studentDao2 = sqlsession2.getMapper(StudentDao.class);
        //可以吧查询的条件放进去,也可以使用一个单独的类ParaObject类封装就可以了。
        List<StudentVo> studentList = studentDao.selectStudentResultType(1001);

        System.out.println("清理缓存");
        sqlsession.clearCache();

        sqlsession.close();//必须关掉,才会进入二级缓存中。
        List<StudentVo> studentList2 = studentDao2.selectStudentResultType(1001);


    }
  1. 确认使用了ehcache
    在这里插入图片描述
  2. 本地缓存文件:
    在这里插入图片描述
  3. 测试结果
PooledDataSource forcefully closed/removed all connections.
Cache Hit Ratio [com.yuhl.dao.StudentDao]: 0.0
Opening JDBC Connection
Created connection 471579726.
==>  Preparing: select id,name,email,age from student where id=?
==> Parameters: 1001(Integer)
<==    Columns: id, name, email, age
<==        Row: 1001, 张三, zhangsan@qq.com, 20
<==      Total: 1
清理缓存
Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1c1bbc4e]
Returned connection 471579726 to pool.
Cache Hit Ratio [com.yuhl.dao.StudentDao]: 0.5

2.5 多个namespace使用EHCache

在这里插入图片描述
UserDao.xml 配置缓存饮用即可,只需要在一个地方配置,其他地方使用即可:
UserDao.xml
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuhl.dao.UserDao">
    <!--引用其他地方的缓存配置-->
    <cache-ref namespace="com.yuhl.dao.StudentDao"/>
   <!-- <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>-->

</mapper>

3.总结

在这里插入图片描述
下一篇:01-Springboot优点&缺点https://blog.csdn.net/fsjwin/article/details/109698409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值