和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缓存的使用及理解相关推荐

  1. mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了

    前言 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询 ...

  2. MyBatis缓存通俗易懂

    1.1     mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的 ...

  3. 缓存在哪里_什么是MyBatis缓存技术

    MyBatis缓存 引言 在一个Web项目中,查询数据库中的操作算是一个非常常用的操作,但是有些数据会被经常性的查询,而每一次都去数据库中查询这些重复的数据,会很消耗数据库的资源,同时使得查询效率也很 ...

  4. 【转】MyBatis缓存机制

    转载:https://blog.csdn.net/bjweimengshu/article/details/79988252. 本文转载自公众号 美团技术点评 前言 MyBatis是常见的Java数据 ...

  5. MyBatis 缓存原来是这么一回事儿!| 原力计划

    作者 | Lw中 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则 ...

  6. redis的基本操作And数据持久化方式以及redis实现mybatis缓存

    Redis 1.NoSql # NoSql(Not Only Sql),不仅仅是sql,泛指非关系型数据库 2.NoSql的诞生 随着互联网web2.0网站的兴起,传统的关系型数据库在高并发和特大规模 ...

  7. Mybatis学习总结(结合个人理解)

    Mybatis 1. MyBatis简介 1.1 什么是Mybatis MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 My ...

  8. 图解 | 聊聊 MyBatis 缓存

    文章目录 一.MyBatis 缓存中的常用概念 二.MyBatis 一级缓存 2.1 一级缓存原理 2.2 一级缓存配置 2.3 一级缓存考题 2.4 MyBatis 一级缓存失效的场景 2.5 My ...

  9. MyBatis缓存机制之一级缓存

    MyBatis缓存机制之一级缓存 前言 MyBatis内部封装了JDBC,简化了加载驱动.创建连接.创建statement等繁杂的过程,是我们常见的持久性框架.缓存是在计算机内存中保存的临时数据,读取 ...

最新文章

  1. Open3D面向机器学习的扩展库
  2. 循环获取结构体中的健名与值的实现
  3. OWASP top 10 (2017) 学习笔记--失效的身份验证
  4. “该文件包含不能在当前代码页(936)中表示的字符,请将该文件保存为 Unicode 格式以防止数据丢失”
  5. Docker之几种storage-driver比较
  6. C# Keywords - as
  7. SAP Spartacus B2B Unit List跳转到Unit Detail页面的路由执行逻辑
  8. Android之开启内置闹钟与已安装的应用程序设置
  9. 使用Windows 自带防火墙拦截勒索病毒
  10. PHP面向对象常见符号总结($this- 、self ::)
  11. 基于Docker的Mysql主从复制
  12. asp.net 网页做一个浮动层_网页的布局与定位看完这篇就够了
  13. JVM调优总结(4)-调优方法
  14. ST-LINK V2.1 制作(含源码及其原理图)(type-c接口)可以配合robomaster 开发板下载口或者直接用杜邦线连接下载,支持串口调试
  15. flash动画入门篇
  16. 360浏览器打不开微信的连接服务器,360浏览器打不开网页怎么办-解决360浏览器打不开网页的方法 - 河东软件园...
  17. 5G C-V2X技术介绍
  18. 用pxe给服务器装系统,使用pxe方式安装系统
  19. 求余数(c++基础)
  20. 如何从iPhone的音乐应用程序中删除Apple Music

热门文章

  1. SQL Server 容易忽略的错误
  2. tushare怎么用 雪球股票网址 网络爬虫python
  3. 小程序实现h5页面的微信支付
  4. 内存溢出————举例分析dump下的hprof文件
  5. Android插件化开发指南——Hook技术(一)【长文】
  6. Mac 命令行删除包含文件的文件夹
  7. Alibaba园区中的雕塑:a big man
  8. 区块链的3个进阶阶段
  9. 基于 Traefik 的 ForwardAuth 配置
  10. python timedelta() 和relativedelta()的区别