文档章节

mybatis一级缓存和二级缓存

龙鸣
 龙鸣
发布于 2015/04/27 16:09
字数 374
阅读 32
收藏 0

mybatis缓存主要实现是PerpetualCache。

一级缓存实现:

BaseExecutor --> localCache参数。

    当session.close()的时候会回调Excutor.close方法,从而情况本地缓存,所以一级缓存的生命周期和session同步,而且缓存是通过:

createCacheKey(ms, parameter, rowBounds, boundSql); localCache.putObject(key, list);


这里直的key的成分包含了sql参数,所以不同参数相同statement也会发起两次sql,所以这里缓存的也是对象(之前在一个博客上看到博主说是缓存的sql语句,是错误的,,如果看客有疑问或者问题希望留言告知)。

二级缓存:

    需要在mybatis.xml里的settings开启:

<setting name="cacheEnabled" value="true"/>
这里开启后Configurtion里就会使用CacheExcutor,默认实现也是 PerpetualCache,当然可以在mapper.xml里指定自己的cache,这里使用ehcache的实现。

<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
这个cache是通过MapperStatement注入到cacheExcutor的,当调用cacheExcutor.query的时候会注入进去。

当调用session.close的时候只会删除一级缓存,而二级缓存还会放在CacheExcutor.TransactionalCacheManager里面。当调用update的时候会根据isFlushCacheRequired来判断是否需要清除缓存,isFlushCacheRequired在mapper.xml里的sql文里配置flushCache属性。

这里有个疑问:之前看别人博客说只要进行插入更新就会清空二级缓存,但这里的代码是只有指定fushCache为true才会去删缓存,还需看代码才行。。

© 著作权归作者所有

共有 人打赏支持
龙鸣
粉丝 3
博文 14
码字总数 5345
作品 0
常州
后端工程师
私信 提问
Mybatis学习系列(七)缓存机制

Mybatis缓存介绍 MyBatis提供一级缓存和二级缓存机制。 一级缓存是Sqlsession级别的缓存,Sqlsession类的实例对象中有一个hashmap用于缓存数据。不同的Sqlsession实例直接hashmap互不影响。M...

仍是少年
07/12
0
0
11.平凡之路-缓存

MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 ...

胖先森
2017/09/05
0
0
mybatis入门教程(九)------mybatis缓存

Mybatis 缓存 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 1. 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或...

残风vs逝梦
2014/06/16
0
5
Mybatis 缓存系统源码解析

本文从以下几个方面介绍: 相关文章 前言 缓存的相关接口 一级缓存的实现过程 二级缓存的实现过程 如何保证缓存的线程安全 缓存的装饰器 相关文章 Mybatis 解析 SQL 源码分析二 Mybatis Mapp...

tsmyk0715
11/25
0
0
MyBatis学习总结(七)——Mybatis缓存

一、MyBatis缓存介绍   正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session ...

zhanghaiyang
2015/12/31
69
0

没有更多内容

加载失败,请刷新页面

加载更多

设置虚拟机固定IP地址

1、点击虚拟机编辑找到虚拟网络编辑器 2、设置网络 3、修改接口配置文件 切换到cd /etc/sysconfig/network-scripts/下面找到对应接口的文件 添加如下内容 4、修改域名服务器 切换到 vi /etc/...

zhu_kai1
3分钟前
0
0
如何解决分布式系统数据事务一致性问题

一、关于分布式系统事务一致性问题 Java 中有三种可以的事务模型,分别称作本地事务模型(Local Transaction Model),编程式事务模型(Programmatic Transaction Model),和声明式事务模型...

hblt-j
4分钟前
0
0
弹幕,是怎样练成的?

说起弹幕看过视频的都不会陌生,那满屏充满着飘逸评论的效果,让人如痴如醉,无法自拔 最近也是因为在学习关于 canvas 的知识,所以今天就想和大家分享一个关于弹幕的故事 那么究竟弹幕是怎样...

我的卡
6分钟前
0
0
VisualBox 安装 CentOS 7.6 操作记录

20181213 VisualBox 安装 CentOS 7.6 操作记录 1、下载 官网下载地址: https://wiki.centos.org/Download找到i386 Everything (ISO), Minimal (ISO), NetInstall (ISO)选择 阿里云镜......

wwzzhh166
9分钟前
0
0
telegram_bot

new group -> 选择人 -> 填写群名 搜索BotFather -> start =========================== ou can control me by sending these commands: /newbot - create a new bot /mybots - edit your bo......

八戒八戒八戒
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部