一文彻底搞懂Mybatis系列(十六)之MyBatis集成EhCache

矫情吗;* 2024-04-01 12:29 237阅读 0赞

MyBatis集成EhCache

  • 一、MyBatis集成EhCache
    • 1、引入mybatis整合ehcache的依赖
    • 2、类根路径下新建ehcache.xml,并配置
    • 3、POJO类 Clazz
    • 4、ClazzMapper类
    • 5、ClazzMapper.xml文件
    • 6、编写测试类及使用

往期文章:
一文彻底搞懂Mybatis系列(一)之mybatis入门
一文彻底搞懂Mybatis系列(二)之mybatis事务管理机制深度剖析
一文彻底搞懂Mybatis系列(三)之mybatis完成增删改查CURD功能超级详细
一文彻底搞懂Mybatis系列(四)之mybatis核心配置文件详解
一文彻底搞懂Mybatis系列(五)之手写Mybatis框架简单探索版
一文彻底搞懂Mybatis系列(六)之在WEB应用中使用Mybatis
一文彻底搞懂Mybatis系列(七)之使用Mybatis的小技巧
一文彻底搞懂Mybatis系列(八)之Mybatis参数处理
一文彻底搞懂Mybatis系列(九)之Mybatis动态SQL标签总结
一文彻底搞懂Mybatis系列(十)之SqlSession、SqlSessionFactory和SqlSessionFactoryBuilder详解
一文彻底搞懂Mybatis系列(十一)之MyBatis多对一映射查询
一文彻底搞懂Mybatis系列(十二)之MyBatis多对一映射延迟加载(association和lazyLoadingEnabled)
一文彻底搞懂Mybatis系列(十三)之MyBatis一对多映射查询
一文彻底搞懂Mybatis系列(十四)之MyBatis一级缓存
一文彻底搞懂Mybatis系列(十五)之MyBatis二级缓存
一文彻底搞懂Mybatis系列(十六)之MyBatis集成EhCache
一文彻底搞懂Mybatis系列(十七)之MyBatis使用分页插件PageHelper

一、MyBatis集成EhCache

  • 集成EhCache是为了代替mybatis自带的二级缓存。一级缓存是无法替代的。
  • mybatis对外提供了接口,也可以集成第三方的缓存组件。比如EhCache、Memcache等。都可以。
  • EhCache是Java写的。Memcache是C语言写的。所以mybatis集成EhCache较为常见,按照以下步骤操作,就可以完成集成

1、引入mybatis整合ehcache的依赖

  1. <dependency>
  2. <groupId>org.mybatis.caches</groupId>
  3. <artifactId>mybatis-ehcache</artifactId>
  4. <version>1.2.2</version>
  5. </dependency>

2、类根路径下新建ehcache.xml,并配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
  4. updateCheck="false">
  5. <!--磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存-->
  6. <diskStore path="d:/ehcache"/>
  7. <!--defaultCache:默认的管理策略-->
  8. <defaultCache eternal="false" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false"
  9. timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>
  10. </ehcache>

3、POJO类 Clazz

注意:Clazz类可以实现序列化接口Serializable ,也可以不实现

  1. public class Clazz implements Serializable {
  2. private Integer cid;
  3. private String name;
  4. ......此处省略getset方法

4、ClazzMapper类

  1. public interface ClazzMapper {
  2. public Clazz selectByCidStep2(Integer cid);
  3. }

5、ClazzMapper.xml文件

注意:此处要使用集成的第三方缓存配置
cache type=“org.mybatis.caches.ehcache.EhcacheCache”

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.powernode.mybatis.mapper.ClazzMapper">
  6. <!--<cache/>-->
  7. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
  8. <select id="selectByCidStep2" resultType="Clazz">
  9. select * from t_clazz where cid = #{cid}
  10. </select>

6、编写测试类及使用

  1. @Test
  2. public void testSecondCache() throws Exception {
  3. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
  4. SqlSession sqlSession1 = factory.openSession();
  5. ClazzMapper mapper = sqlSession1.getMapper(ClazzMapper.class);
  6. Clazz clazz = mapper.selectByCidStep2(1000);
  7. System.out.println(clazz);
  8. sqlSession1.close();
  9. SqlSession sqlSession2 = factory.openSession();
  10. ClazzMapper mapper1 = sqlSession2.getMapper(ClazzMapper.class);
  11. Clazz clazz1 = mapper1.selectByCidStep2(1000);
  12. System.out.println(clazz1);
  13. sqlSession2.close();
  14. }

运行结果如下:
在这里插入图片描述
从结果可以发现,第一次查询了sql语句,第二次直接走了缓存,需要注意的一点是,必须要将SqlSession对象关闭掉,才会将一级缓存结果写入到二级缓存中。
因为虽然集成了第三方的缓存组件,但是一级缓存是mybatis默认开启的,无法替代。

发表评论

表情:
评论列表 (有 0 条评论,237人围观)

还没有评论,来说两句吧...

相关阅读