文档章节

mybatis一级缓存和二级缓存

龙鸣
 龙鸣
发布于 2015/04/27 16:09
字数 374
阅读 31
收藏 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缓存机制 前言 MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足...

为了美好的明天
05/23
0
0
MyBatis学习总结(七)——Mybatis缓存

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

zhanghaiyang
2015/12/31
69
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 乱七八糟的可重复读隔离级别实现

MySQL 乱七八糟的可重复读隔离级别实现 摘要: 原文可阅读 http://www.iocoder.cn/Fight/MySQL-messy-implementation-of-repeatable-read-isolation-levels 「shimohq」欢迎转载,保留摘要,谢...

DemonsI
49分钟前
2
0
Spring源码阅读——2

在阅读源码之前,先了解下Spring的整体架构: 1、Spring的整体架构 1. Ioc(控制反转) Spring核心模块实现了Ioc的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描...

叶枫啦啦
今天
1
0
jQuery.post() 函数格式详解

jquery的Post方法$.post() $.post是jquery自带的一个方法,使用前需要引入jquery.js 语法:$.post(url,data,callback,type); url(必须):发送请求的地址,String类型 data(可选):发送给后台的...

森火
今天
0
0
referer是什么意思?

看看下面这个回答(打不开网页可以把网址复制到搜索栏): https://zhidao.baidu.com/question/577842068.html

杉下
今天
1
0
使用U盘安装CentOS-解决U盘找不到源

1. 使用UltraISO制作CentOS安装盘 如果需要安装带界面的系统,为保证安装顺利,可选择Everything版本的ISO制作安装盘。 2. 在BIOS中选择使用U盘安装 系统启动后,进入安装选择界面,其中有三...

Houor
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部