文档章节

博为峰JavaEE技术文章 ——MyBatis 缓存(3)自定义缓存

博为峰教研组
 博为峰教研组
发布于 2017/02/15 19:33
字数 458
阅读 44
收藏 0

我们了解了Mybatis的session级别的一级缓存和全局级别的二级缓存,那么缓存是如何运作的呢?今天小博老师给大家实现一个自定义的二级缓存,帮助理解cache的运作流程。

自定义缓存只需要实现一个接口:org.apache.ibatis.cache.Cache即可。先来看一下这个接口的定义:


 

接口中共有七个方法,我们队每个方法做一个简单说明。

getId():获取cache对象的唯一标示,该标识在对象创建时传入(构造函数)。

putObject():把key-value键值对存放到cache。

getObject():根据key获取存放在cache中的值。

removeCache():根据key删除对应的缓存对象值。

clear():清空所有的缓存对象。

getSize():获取已经缓存的对象个数。

getReadWriteLock():获取读写锁。

 

根据接口说明,我们可以实现一个自定义的缓存类,如:BwfCache。该类中,我们使用ConcurrentHashMap作为缓存的容器。具体代码如下:

使用自定义缓存,只需要在mapper的<cache>元素加上type属性,指向自定义的缓存类即可:

接下来,我们对该缓存做一个简单测试,测试代码如下:

 

控制台打印结果

 

1. 生成cache对象id;

2. 第一次从cache中获取对象,未命中(因为还没有存放对象);

3. 把从数据库查询的结果放到cache中;

4. 第二次从cache中获取对象,命中;

 

从以上测试可以了解到,二级缓存的流程为: 从二级缓存中进行查询 -> [如果缓存中没有,委托给 BaseExecutor] -> 进入一级缓存中查询 -> [如果也没有] -> 则执行 JDBC 查询 -> 把查询结果放到缓存。

 

© 著作权归作者所有

共有 人打赏支持
博为峰教研组
粉丝 50
博文 1224
码字总数 479077
作品 0
黄浦
程序员
图解 & 深入浅出 JavaWeb:Servlet 再说几句

Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter :BYSocket 上一篇的《 Servlet必会必知 》受到大家一致好评 — (感谢 读者 及 OSC 推荐...

泥沙砖瓦浆木匠
2015/09/03
0
13
技术专题讨论:如何对 JPA 或者 MyBatis 进行技术选型

在我们平时的项目中,大家都知道可以使用 JPA 或者 Mybatis 作为 ORM 层。对 JPA 和 Mybatis 如何进行技术选型? 下面看看大精华总结如下: 最佳回答 首先表达个人观点,JPA必然是首选的。 ...

后海
06/27
0
0
动态高速缓存技术(缓存jsp、servlet等动态数据)

(jsp、servlet) 动态高速缓存技术 缓存一般在大型web端应用上使用教多常见,今日读了ibm 开发者社区中的一篇关于 动态缓存技术的文章,发发言,也是记录下内容。 主要流程: 缓存主要对象: ...

so1y
2011/03/22
0
2
JSP运行原理与JSP隐式对象(9个)

一、JSP运行原理 Web容器(Servlet引擎)接收到.jsp为扩展名的URL访问请求时,它将把该访问请求交给JSP引擎去处理,JSP引擎负责解释和执行JSP页面。 当Web容器接收到客户端的访问请求时,它将...

KYZGJ
2014/04/14
0
0
图解 & 深入浅出 JavaWeb:Servlet必会必知

Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter :BYSocket “眨眼间,离上一篇写技术博文时隔1个月。怕自己真的生疏了,都是备案太慢惹...

KeepMoving
2015/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
14
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部