Mybatis学习笔记(十七)【mybatis整合ehcache】

老司机学习MyBatis之整合ehcache缓存框架 一、前言 MyBatis为我们提供了Cache接口,也提供了一些实现类,进入Cache接口源码,可以看到缓存对于MyBatis来说就是一个Map,比较简陋。但是大家都知道MyBatis是一个专注于持久层框架,与数据库打交道MyBatis是很专业的,但是对于缓存它就略显不足,即便如此MyBatis却提供了Cache接口的标准规范,谁做缓存专业,谁就来实现它,提供了很好的扩展性。本节我们将介绍了一下... 阅读详情

Contents


ehcache是一个分布式缓存框架

分布缓存

我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式)

这里写图片描述

不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发。所以要使用分布式缓存对缓存数据进行集中管理。

mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合。

整合方法(掌握)

mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口开发即可。

mybatis和ehcache整合,mybatis和ehcache整合包中提供了一个cache接口的实现类。

package org.apache.ibatis.cache;

import java.util.concurrent.locks.ReadWriteLock;

/**
 * SPI for cache providers.
 * 
 * One instance of cache will be created for each namespace.
 * 
 * The cache implementation must have a constructor that receives the cache id as an String parameter.
 * 
 * MyBatis will pass the namespace as id to the constructor.
 * 
 * <pre>
 * public MyCache(final String id) {
 *  if (id == null) {
 *    throw new IllegalArgumentException("Cache instances require an ID");
 *  }
 *  this.id = id;
 *  initialize();
 * }
 * </pre>
 *
 * @author Clinton Begin
 */

public interface Cache {

  /**
   * @return The identifier of this cache
   */
  String getId();

  /**
   * @param key Can be any object but usually it is a {@link CacheKey}
   * @param value The result of a select.
   */
  void putObject(Object key, Object value);

  /**
   * @param key The key
   * @return The object stored in the cache.
   */
  Object getObject(Object key);

  /**
   * Optional. It is not called by the core.
   * 
   * @param key The key
   * @return The object that was removed
   */
  Object removeObject(Object key);

  /**
   * Clears this cache instance
   */  
  void clear();

  /**
   * Optional. This method is not called by the core.
   * 
   * @return The number of elements stored in the cache (not its capacity).
   */
  int getSize();

  /** 
   * Optional. As of 3.2.6 this method is no longer called by the core.
   *  
   * Any locking needed by the cache must be provided internally by the cache provider.
   * 
   * @return A ReadWriteLock 
   */
  ReadWriteLock getReadWriteLock();

}

mybatis默认实现cache类是:

package org.apache.ibatis.cache.impl;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;

import org.apache.ibatis.cache.Cache;
import org.apache.ibatis.cache.CacheException;

/**
 * @author Clinton Begin
 */
public class PerpetualCache implements Cache {

  private String id;

  private Map<Object, Object> cache = new HashMap<Object, Object>();

  public PerpetualCache(String id) {
    this.id = id;
  }

  public String getId() {
    return id;
  }

  public int getSize() {
    return cache.size();
  }

  public void putObject(Object key, Object value) {
    cache.put(key, value);
  }

  public Object getObject(Object key) {
    return cache.get(key);
  }

  public Object removeObject(Object key) {
    return cache.remove(key);
  }

  public void clear() {
    cache.clear();
  }

  public ReadWriteLock getReadWriteLock() {
    return null;
  }

  public boolean equals(Object o) {
    if (getId() == null) throw new CacheException("Cache instances require an ID.");
    if (this == o) return true;
    if (!(o instanceof Cache)) return false;

    Cache otherCache = (Cache) o;
    return getId().equals(otherCache.getId());
  }

  public int hashCode() {
    if (getId() == null) throw new CacheException("Cache instances require an ID.");
    return getId().hashCode();
  }

}

整合ehcache

  • 加入ehcache包
    • ehcache-core-2.6.5.jar
    • mybatis-ehcache-1.0.2.jar

配置mapper中cache中的type为ehcache对cache接口的实现类型

 <!-- 开启本mapper的namespace下的二级缓存
    type:指定cache接口的实现类的类型,mybatis默认使用PerpetualCache
    要和ehcache整合,需要配置type为ehcache实现cache接口的类型
    <cache />
    -->
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

加入ehcache的配置文件

在classpath下配置ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    <diskStore path="F:\develop\ehcache" />
    <defaultCache 
        maxElementsInMemory="1000" 
        maxElementsOnDisk="10000000"
        eternal="false" 
        overflowToDisk="false" 
        timeToIdleSeconds="120"
        timeToLiveSeconds="120" 
        diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU">
    </defaultCache>
</ehcache>
ehcache-core-2.6.5.jar和mybatis-ehcache-1.0.2.jar ehcache.xml配置内容 立即下载

相关推荐

mybatis-ehcache-1.0.2.jar

mybatis-ehcache-1.0.2.jar META-INF/LICENSE META-INF/MANIFEST.MF META-INF/NOTICE META-INF/maven/org.mybatis.caches/mybatis-ehcache/pom.properties META-INF/maven/org.mybatis.caches/mybatis-ehcache/pom.xml org.mybatis.caches.ehcache.EhcacheCache.class org.mybatis.caches.ehcache.LoggingEhcache.class

mybatis 整合 ehcache

mybatis允许缓存由第三方缓存来实现,多以定义了cache接口,第三方只要实现该接口即可,和mybatis整合在一起后由mybatis在程序中进行调用; Ehcache介绍 在Java项目广泛的使用。它是一个开源的、设计于提高在数据从RDBMS中取出来的高花费、高延迟采取的一种缓存方案。正因为Ehcache具有健壮性(基于java开发)、被认证(具有apache 2.0 licen...

weixin_42325327的博客 488

从梯度泄露到数据复原:DLG与iDLG算法实战解析

本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。

weixin_30552811的博客 191

Mybatis与Ehcache整合

Mybatis与Ehcache整合可以提高性能,降低数据库压力。查询百度发现整合其实非常简单的

rishengcsdn的专栏 3万+

Ansys Zemax | 公差分析中的补偿器优化:如何提升系统良率?

本文深入探讨了在Ansys Zemax公差分析中如何有效设置与优化补偿器以提升系统良率。文章指出,补偿器是连接理想设计与现实生产的关键,通过模拟实际装配中的调整(如后焦距),能显著改善公差分析的“悲观”预测。详细介绍了补偿器的添加方法、多补偿器策略、评价函数设计以及通过灵敏度分析和蒙特卡洛档案优化补偿效果,旨在帮助光学工程师制定更符合生产实际的公差策略,从而有效提升产品良率。

weixin_28419039的博客 619

从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现tcp网络通信(二)

Cubemx配置LWIP,实现网络通信

qq_30623327的博客 1万+

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

MyBatis集成EhCache

weixin_43860634的博客 1180

智能问数产品背后的Agent技术揭秘:从任务分解到工具调用的完整流程

本文深入解析智能问数产品背后的Agent技术,从任务分解到工具调用的完整流程。通过大模型驱动的语义理解和动态工具调度,Agent系统能高效处理复杂数据分析需求,显著提升响应速度和准确率。文章详细介绍了模块化架构、任务分解机制、动态工具调用及双通道记忆系统等核心技术,展示了大模型时代的新型数据分析范式。

weixin_30399821的博客 436

MyBatis集成EhCache

EhCache是Java写的。原文链接:https://blog.youkuaiyun.com/weixin_52496592/article/details/129452570。mybatis对外提供了接⼝,也可以集成第三⽅的缓存组件。集成EhCache是为了代替mybatis⾃带的⼆级缓存。⼀级缓存是⽆法替代的。第⼆步:在类的根路径下新建echcache.xml⽂件,并提供以下配置信息。第三步:修改SqlMapper.xml⽂件中的标签,添加type属性。第⼀步:引⼊mybatis整合ehcache的依赖。

qq_49974844的博客 439

CMIP6数据处理及在气候变化、水文、生态等领域中的应用

CMIP6、Biome-BGC、生态、气候变化、气象、水文、气候模式、植被、生态模式、遥感、极端气候、降水、WRF模式、动力降尺度、RCM、大气环流模型、贝叶斯模型、、降尺度

PhyliciaFelicia的博客 1538

Redhawk:什么是timing window?

STA timing file中timing window的作用和计算方式

m0_61544122的博客 1万+

MyBatis

详细记录了MyBatis获取参数值和动态SQL中标签的使用,在工作中批量操作非常实用。特殊SQL在MyBatis中的写法也有涉及,对于批量删除,批量添加具有借鉴意义。

m0_56709616的博客 383

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 130

mybatis学习笔记(16)-mybatis整合ehcache

ehcache是一个分布式缓存框架

brianway 3360

数学工具箱:Clarke与Park变换

本文详细解析了FOC(磁场定向控制)中的核心数学工具——Clarke变换与Park变换。首先阐述了坐标变换的必要性:将复杂的三相交流系统简化为直流系统,便于精确控制。Clarke变换将三相静止坐标系转换为两相静止坐标系,减少变量数量;Park变换进一步将两相静止坐标系转换为两相旋转坐标系,实现交流量到直流量的转换。文章提供了两种变换的数学公式、物理意义图解及C语言实现代码,并简要介绍了逆变换过程。这些变换为电机控制提供了关键的数学基础,后续将结合GD32F303的FPU特性进行优化实现。

汽车电子软件领域知识分享 175

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Mybatis整合ehcache

Mybatis整合ehcache 加入jar包 二级缓存必须开启 创建ehcahce.xml <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <!--&l...

桀骜浮沉的博客 596

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【MyBatis】——mybatis缓存以及整合ehcache

首先向介绍一下mybatis的缓存以及为什么使用缓存。 MyBatis缓存介绍             和hibernate等其他持久层框架一样,mybatis同样提供了一级缓存和二级缓存的支持,用于减轻数据压力,提高数据库性能。             一级缓存时SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(Ha

许小乖……是总攻 994

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Mybatis学习笔记(十三)——mybatis整合ehcache

本博客源码下载:戳我一下 Mybatis学习笔记汇总:戳我一下 EhCache 是一个纯Java的进程内缓存框架,是一种广泛使用的开源Java分布式缓存,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 一、分布式缓存 我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式)。如果不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发...

啦啦啦的博客 453

mybatis整合ehcache

1、ehcache介绍 ehcache是一个分布式缓存框架。 分布式缓存 系统为了提高系统并发, 性能,一般对系统进行分布式部署(集群部署方式)。 何时使用分布式缓存 缓存的数据在各个服务器单独存储 缓存数据不能够共享,不能够集中管理 不方便系统开发,所以要使用分布式缓存 mybatis不能够实现分布式缓存(缓存数据的共享和集中管理) 需要和其他的分布式缓存框架整

庞凡 坚定自己踏实走好每一步 1567

【Mybatis】Mybatis整合第三方缓存ehcache

1. Mybatis整合第三方缓存原理图: 客户从数据库获取数据视为一次会话,抽象为sqlSession对象 一个Excutor包含增删改查的操作; CachingExcutor是对Excutor的包装,此处相当于代理模式 当有会话时,先访问CachingExcutor对象,CachingExcutor先从二级缓存查找数据,如果有就直接返回;如果没有,就进入Excutor的一级缓存,如果还是没...

JJ_Notebook的博客 455

Java日记之MyBatis缓存 , 整合ehcache

文章目录前言一、哪里会用到缓存?二、通过日志查看一级缓存的工作1.搭建环境并写好查询语句2.查询两个相同的内容3.运行并查看控制台日志4.结论二. 二级缓存1.显式地开启二级缓存2.二级缓存的策略3.缓存顺序三. 整合ehcache缓存 前言 做过web开发的都知道 , 浏览器缓存是个让人头大的问题 , 开发过程中需要频繁清空缓存 , 然而对于mybatis框架来说 , 缓存却是可用提高效率的工具 一、哪里会用到缓存? 对于一些需要频繁查询 , 但是内容雷同的内容 , 为了节约资源 , MyBatis会

qq_45596525的博客 300

MyBatis 整合 ehcache和 redis

文章目录Mybatis集成ehcache整合配置测试Mybatis集成redis配置添加 pom.xml 依赖spring + redis 集成实现缓存功能(与mybatis无关)将redis缓存引入到mybatis中spring与mybatis整合文件中开启二级缓存在XxxMapper.xml中添加自定义cache功能测试附录MyBatis内置的二级缓存算法 说明:这是在spring整合MyBa...

qq_43059674的博客 482

SSM整合ehcache

SSM整合ehcache EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。mybatis需要自己整合; 下面开始整合mybatis和Ehcache 1.使用首先要把需要的jar包依赖加入pom中 org.mybatis mybatis-ehcache 1.0.0 org.eh

Java__han的博客 1824

Mybatis框架单独整合ehcache

如果需要将ehcache交给spring管理,请参考https://blog.youkuaiyun.com/Stephen_mu/article/details/88597771 先上一张Mybatis整合第三方cache的原理图 由于mybatis主要是一套持久层框架,自身并没有较为完善的缓存解决方案,所以我们需要使用第三方缓存框架来完善系统。 1.先对ehcache进行相关介绍 ehc...

ys.hubery 198

(十六)Mybatis整合EhCache缓存框架用法详解

这篇文章主要讲述Mybatis整合EhCache缓存框架用法详解,写的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 目录什么是EhCache?代码示例1、导入第三方缓存包2、配置缓存元素3、测试4、注意总结 什么是EhCache? EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。他和mybatis当中的二级缓存唯一的区别就是,他是存储于硬盘当中的,也就是他是可以用来做分布式缓存

怪咖@的博客 1906
上一篇: Mybatis学习笔记(十六)【查询缓存之二级缓存】
下一篇: Mybatis学习笔记(十八)【spring和mybatis整合】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值