文档章节

mybatis缓存的使用及理解

whaon
 whaon
发布于 2013/04/16 15:43
字数 422
阅读 26995
收藏 30
和hibernate一样,mybatis也有缓存机制
一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,所以当session commit或close后,缓存就会被清空

二级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache 

一级缓存缓存的是SQL语句,而二级缓存缓存的是结果对象,看如下例子(mybatis的日志级别设为debug)

List<User> users = sqlSession.selectList("com.my.mapper.UserMapper.getUser", "jack");
System.out.println(users);
 
//sqlSession.commit();①

 
List<User> users2 = sqlSession.selectList("com.my.mapper.UserMapper.getUser", "jack");//②admin
System.out.println(users);

结果是只发起一次SQL语句,如果我们把②出的参数jack改为admin,发现还是只发起一次SQL语句,但是会设置不同参数

如果把①处去掉注释,会发现不会有缓存了


下面就来启用二级缓存

在配置文件中启用二级缓存

<setting name="cacheEnabled" value="true" />
在需要进行缓存的mapper文件UserMapper.xml中加上
<cache readOnly="true"></cache>
注意这里的readOnly设为true,默认是false,表示结果集对象需要被序列化


我们打开①处注释,②处仍然使用jack,我们发现结果只执行了一次SQL语句

但是如果把②处改为admin,执行了2次SQL语句,这说明二级缓存是缓存结果集对象的


下面我们来使用ehcache

在classpath下添加ehcache.xml

在UserMapper.xml中添加:

<!-- <cache readOnly="true" type="org.mybatis.caches.ehcache.LoggingEhcache"/>   -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
用上面那个会输出更加详细的日志,下面的不会

需要用到ehcache.jar,下载地址:http://sourceforge.net/projects/ehcache/files/ehcache/ehcache-2.7.0/ehcache-2.7.0-distribution.tar.gz/download

mybatis-ehcache.jar下载地址:http://code.google.com/p/mybatis/downloads/detail?name=mybatis-ehcache-1.0.2-SNAPSHOT-bundle.zip&can=3&q=Product%3DCache














© 著作权归作者所有

上一篇: Git初体验
whaon

whaon

粉丝 49
博文 42
码字总数 38353
作品 0
厦门
程序员
私信 提问
Mybatis缓存(1)--------系统缓存及简单配置介绍

前言 Mybatis的缓存主要有两种: 系统缓存,也就是我们一级缓存与二级缓存; 自定义的缓存,比如Redis、Enhance等,需要额外的单独配置与实现,具体日后主要学习介绍。 在这里主要记录系统缓...

JJian
2018/07/29
0
0
《深入理解mybatis原理》 MyBatis的二级缓存的设计原理

[+] MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将全面分析MyBatis的二级缓存的设计原理。 1.MyBatis的缓存机制整体设计以及二级缓存...

嘻哈开发者
2016/06/28
115
0
【持久化框架】Mybatis与Hibernate的详细对比

前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理。 Mybatis 【持久化框架】Mybatis简介与原理 【持久化框架】Spr...

sietai
2018/05/18
0
0
JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结

我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项...

AmyTian
2016/03/10
371
0
HIBERNATE与 MYBATIS的对比

我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项...

商者
2016/03/17
95
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊dubbo的TimeoutFilter

序 本文主要研究一下dubbo的TimeoutFilter ListenableFilter dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/ListenableFilter.java public abstract class Liste......

go4it
19分钟前
4
0
方法与数组

方法 方法就是完成特定功能的代码块;在很多语言里面都有函数的定义,函数在Java中被称为方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) throw 异常{ 函数体;...

凹凸凸
42分钟前
2
0
死磕 java同步系列之StampedLock源码解析

问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWriteLock的对比? 简介 StampedLock是java8中新增的类,...

彤哥读源码
今天
4
1
性能优化工具(二)-Systrace

一、简介 Systrace是分析Android性能问题的神器,Google IO 2017上更是对其各种强推. 是分析卡顿掉帧问题核心工具,只要能提供卡顿现场,systrace就能很好定位问题,但是有一定上手难度,所以...

天王盖地虎626
今天
9
0
Linux 网络

MtrS
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部