千家信息网

mybatis和ehcache怎么实现缓存

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"mybatis和ehcache怎么实现缓存"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2026年11月03日mybatis和ehcache怎么实现缓存

本篇内容介绍了"mybatis和ehcache怎么实现缓存"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

缓存的概念

java里缓存可以分两种情况,一种是JVM的缓存,这个是JVM与操作系统打交道用的,在使用java语言开发时,一般不用到。

一种是java语言缓存,这里的缓存是一种机制,不与任何硬件相关。比如一个 static的变量, 当第一次访问他时我们到文件里读他的值,以后访问时,直接把这个值返回去,这里省下了IO的时间,提高了效率,这就是一个简单的缓存机制。

一级缓存

一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的。

处理流程:

用户发起查询请求,查找某条数据,sqlSession先去缓存中查找,是否有该数据,如果有,读取;

如果没有,从数据库中查询,并将查询到的数据放入一级缓存区域,供下次查找使用。

但sqlSession执行commit,即增删改操作时会清空缓存。这么做的目的是避免脏读。

如果commit不清空缓存,会有以下场景:A查询了某商品库存为10件,并将10件库存的数据存入缓存中,之后被客户买走了10件,数据被delete了,但是下次查询这件商品时,并不从数据库中查询,而是从缓存中查询,就会出现错误。

二级缓存

二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

UserMapper有一个二级缓存区域(按namespace分),其它mapper也有自己的二级缓存区域(按namespace分)。每一个namespace的mapper都有一个二级缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。

处理流程:

这里有一个问题,既然有了一级缓存,那么为什么要提供二级缓存呢?

二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存的作用范围更大。

还有一个原因,实际开发中,MyBatis通常和Spring进行整合开发。Spring将事务放到Service中管理,对于每一个service中的sqlsession是不同的,这是通过mybatis-spring中的org.mybatis.spring.mapper.MapperScannerConfigurer创建sqlsession自动注入到service中的。 每次查询之后都要进行关闭sqlSession,关闭之后数据被清空。所以spring整合之后,如果没有事务,一级缓存是没有意义的。

二级缓存的使用:

1,打开总开关

在MyBatis的配置文件中加入:

2,在需要开启二级缓存的mapper.xml中加入caceh标签

3,让使用二级缓存的POJO类实现Serializable接口

public class User implements Serializable {}

整合ehcache

分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。

而mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合。这里简单介绍和ehcache整合。

整合流程:

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

mybatis和ehcache整合,mybatis和ehcache整合包中提供了一个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 cache = new HashMap();
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(); }}

配置步骤:

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


表示开启此mapper的namespace下的二级缓存

type表示指定cache接口的实现类的类型,mybatis默认使用PerpetualCache。

要和ehcache整合,需要配置type为ehcache实现cache接口的类型。

2,加入ehcache的配置文件

在classpath下配置ehcache.xml

            

3,Maven中ehcache 相关依赖

     org.ehcache     ehcache     3.1.3            org.mybatis     mybatis-ehcache     1.0.0

最后,简单比较三个比较流行的缓存工具。

ehcache 是一个纯Java的进程内缓存框架,hibernate使用其做二级缓存。同时,ehcache可以通过多播的方式实现集群。

memcache是一套分布式的高速缓存系统,提供key-value这样简单的数据储存,可充分利用CPU多核,无持久化功能。

redis高性能的key-value系统,提供丰富的数据类型,单核CPU有抗并发能力,有持久化和主从复制的功能。

"mybatis和ehcache怎么实现缓存"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

缓存 数据 整合 查询 接口 区域 配置 分布式 多个 类型 开发 不同 数据库 文件 流程 系统 级别 相同 两个 事务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 云之行互联网科技 科技互联网产品 互联网科技行业发展 互联网科技公司怎么样 奇酷互联网科技 嘟嘟瓜互联网科技 广州善班互联网科技 互联网科技创新企业排名 天速互联网络科技有限公司 互联网软件和科技 呼和浩特新华互联网科技学院 中国科技创新与世界互联网大会 乌鲁木齐新华智原互联网科技学校 济南有互联网科技公司吗 云南省自由互联网科技有限公司 云鲸互联网络科技有限公司 容联科技互联网电商 中国科技和美国互联网 中国互联网公司的科技投入 互联网科技产业 广州百单互联网科技有限公司 互联网金融与金融科技 碳银互联网科技有限公司 中盈科技互联网信息有限公司 须眉科技是互联网公司吗 重庆互联网医院沙龙医盟信息科技 广州燕处互联网科技有限公司 六子台科技互联网展会 小牛互联网科技有限公司地址
0