mybatis缓存的使用及理解
和hibernate一样,mybatis也有缓存机制
一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,所以当session commit或close后,缓存就会被清空
二级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache
一级缓存缓存的是SQL语句,而二级缓存缓存的是结果对象,看如下例子(mybatis的日志级别设为debug)
1
2
3
4
5
6
7
8
|
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语句,但是会设置不同参数
如果把①处去掉注释,会发现不会有缓存了
下面就来启用二级缓存
在配置文件中启用二级缓存
1
|
< setting name = "cacheEnabled" value = "true" />
|
在需要进行缓存的mapper文件UserMapper.xml中加上
1
|
< cache readOnly = "true" ></ cache >
|
注意这里的readOnly设为true,默认是false,表示结果集对象需要被序列化
我们打开①处注释,②处仍然使用jack,我们发现结果只执行了一次SQL语句
但是如果把②处改为admin,执行了2次SQL语句,这说明二级缓存是缓存结果集对象的
下面我们来使用ehcache
在classpath下添加ehcache.xml
在UserMapper.xml中添加:
1
2
|
<!-- <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
mybatis缓存的使用及理解相关推荐
- mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了
前言 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询 ...
- MyBatis缓存通俗易懂
1.1 mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的 ...
- 缓存在哪里_什么是MyBatis缓存技术
MyBatis缓存 引言 在一个Web项目中,查询数据库中的操作算是一个非常常用的操作,但是有些数据会被经常性的查询,而每一次都去数据库中查询这些重复的数据,会很消耗数据库的资源,同时使得查询效率也很 ...
- 【转】MyBatis缓存机制
转载:https://blog.csdn.net/bjweimengshu/article/details/79988252. 本文转载自公众号 美团技术点评 前言 MyBatis是常见的Java数据 ...
- MyBatis 缓存原来是这么一回事儿!| 原力计划
作者 | Lw中 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则 ...
- redis的基本操作And数据持久化方式以及redis实现mybatis缓存
Redis 1.NoSql # NoSql(Not Only Sql),不仅仅是sql,泛指非关系型数据库 2.NoSql的诞生 随着互联网web2.0网站的兴起,传统的关系型数据库在高并发和特大规模 ...
- Mybatis学习总结(结合个人理解)
Mybatis 1. MyBatis简介 1.1 什么是Mybatis MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 My ...
- 图解 | 聊聊 MyBatis 缓存
文章目录 一.MyBatis 缓存中的常用概念 二.MyBatis 一级缓存 2.1 一级缓存原理 2.2 一级缓存配置 2.3 一级缓存考题 2.4 MyBatis 一级缓存失效的场景 2.5 My ...
- MyBatis缓存机制之一级缓存
MyBatis缓存机制之一级缓存 前言 MyBatis内部封装了JDBC,简化了加载驱动.创建连接.创建statement等繁杂的过程,是我们常见的持久性框架.缓存是在计算机内存中保存的临时数据,读取 ...
最新文章
- Open3D面向机器学习的扩展库
- 循环获取结构体中的健名与值的实现
- OWASP top 10 (2017) 学习笔记--失效的身份验证
- “该文件包含不能在当前代码页(936)中表示的字符,请将该文件保存为 Unicode 格式以防止数据丢失”
- Docker之几种storage-driver比较
- C# Keywords - as
- SAP Spartacus B2B Unit List跳转到Unit Detail页面的路由执行逻辑
- Android之开启内置闹钟与已安装的应用程序设置
- 使用Windows 自带防火墙拦截勒索病毒
- PHP面向对象常见符号总结($this- 、self ::)
- 基于Docker的Mysql主从复制
- asp.net 网页做一个浮动层_网页的布局与定位看完这篇就够了
- JVM调优总结(4)-调优方法
- ST-LINK V2.1 制作(含源码及其原理图)(type-c接口)可以配合robomaster 开发板下载口或者直接用杜邦线连接下载,支持串口调试
- flash动画入门篇
- 360浏览器打不开微信的连接服务器,360浏览器打不开网页怎么办-解决360浏览器打不开网页的方法 - 河东软件园...
- 5G C-V2X技术介绍
- 用pxe给服务器装系统,使用pxe方式安装系统
- 求余数(c++基础)
- 如何从iPhone的音乐应用程序中删除Apple Music