文章目录

  • 一、一级缓存
    • 1.介绍
    • 2.一级缓存失效的四种情况:
  • 二、二级缓存
    • 1.介绍
    • 2.二级缓存开启的条件
    • 3.二级缓存失效的一种情况:
  • 三、MyBatis缓存查询的顺序
  • 四、整合第三方缓存(针对二级缓存)

一、一级缓存

1.介绍

MyBatis的一级缓存是SqlSession级别的,当使用同一个SqlSession进行相同的查询操作时,第一次的查询数据会被缓存,后面的查询操作会从缓存中进行数据获取,并不会访问数据库。一级缓存默认是开启的。

2.一级缓存失效的四种情况:

  • 使用的不是用一个SqlSession
  • 两次查询的条件不同
  • 两次查询操作中进行增删改操作
  • 手动清除了缓存,sqlSession.clearCache()

二、二级缓存

1.介绍

MyBatis的二级缓存是SqlSessionFactory级别的,即通过同一个SqlSessionFactory所获取SqlSession对象查询的数据会被缓存,再通过同一个SqlSessionFactory所获取的SqlSession查询相同的数据会从缓存中获取。二级缓存默认是关闭的,需要满足以下条件才能开启。

2.二级缓存开启的条件

  • 在核心配置文件中,设置全局配置属性cacheEnabled=“true”,默认为true,不需要设置
  • 在映射文件中设置标签<cache/>
  • 二级缓存必须在SqlSession关闭或提交之后有效
  • 查询的数据所转换的实体类类型必须实现序列化的接口,implements Serializable

3.二级缓存失效的一种情况:

  • 两次查询操作中进行增删改操作

三、MyBatis缓存查询的顺序

  • 先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。
  • 如果二级缓存没有命中(log中会生成命中率),再查询一级缓存
  • 如果一级缓存也没有命中,则查询数据库
  • SqlSession关闭之后,一级缓存中的数据会写入二级缓存,二级缓存中的数据更多一些

四、整合第三方缓存(针对二级缓存)

可以通过jar引入第三方的缓存

MyBatis的缓存问题相关推荐

  1. 深入了解MyBatis二级缓存

    深入了解MyBatis二级缓存 一.创建Cache的完整过程 我们从SqlSessionFactoryBuilder解析mybatis-config.xml配置文件开始: Reader reader ...

  2. springboot mybatis 事务_SpringBoot 下 Mybatis 的缓存

    "IT魔幻屋"致力于让你遇见更好的自己! 说起 mybatis,作为 Java 程序员应该是无人不知,它是常用的数据库访问框架.与 Spring 和 Struts 组成了 Java ...

  3. 通过源码分析MyBatis的缓存

    前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ MyBatis缓存介绍 首先看一段wiki上关于MyBatis缓存的介绍 ...

  4. Mybatis二级缓存原理

    记录是一种精神,是加深理解最好的方式之一. 最近看了下Mybatis的源码,分析了二级缓存的实现方式,在这里把他记下来.虽然这不复杂,对这方面的博客也有很多,写的也很好.但我坚信看懂了是其一,能够教别 ...

  5. mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache

    1      查询缓存 1.1  什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在 ...

  6. Mybatis一级缓存,二级缓存的实现就是这么简单

    介绍 又到了一年面试季,所以打算写一点面试常问的东西,争取说的通俗易懂.面试高级岗,如果你说熟悉Mybatis,下面这些问题基本上都会问 Mybatis插件的实现原理? 如何写一个分页插件? Myba ...

  7. (转)mybatis一级缓存二级缓存

    一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用同一个SqlSess ...

  8. Mybatis一级缓存、二级缓存

    一级缓存:SqlSession mybatis一级缓存是指在内存中开辟一块区域,用来保存用户对数据库的操作信息(sql)和数据库返回的数据,如果下一次用户再执行相同的请求,那么直接从内存中读数数据而不 ...

  9. MyBatis-学习笔记11【11.Mybatis的缓存】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

  10. mybatis查询缓存——(十三)

    1.     mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. ...

最新文章

  1. 追忆童年,教你用Python画出儿时卡通人物
  2. 混合使用Azure LB和ILB访问相同web服务(2)
  3. boost::core::bit_width的测试程序
  4. Android SQL语句实现数据库的增删改查
  5. django日志使用TimeRotateFileHandler
  6. 算到怀疑人生!如何用并查集解决朋友圈个数问题?
  7. 网易云基于 Kubernetes 的深度定制化实践
  8. Jenkins持续集成学习-搭建jenkins问题汇总
  9. 修改Wordpress插件---advanced-access-manager.1.7.3---
  10. photoshop cs6 界面字体太小解决方法
  11. SVN上传的时候没法显示文件名,只显示后缀名
  12. 云服务器无法连接怎么办
  13. Eclipse中文版的,怎么变成英文版
  14. QQ空间人气精灵王 QQ空间人气提升
  15. 何时需要对时间序列进行Log Transformation
  16. 微信公众号模板如何使用?公众号模板教程!
  17. Win8.1 IE11 浏览器无法打开任何网页的解决办法
  18. python怎么同时对多行代码进行注释?
  19. MATLAB初阶绘图
  20. 视频转换成gif (知乎)

热门文章

  1. USACO Training 综述
  2. 10亿美金的惊天收购!苹果拿下了英特尔手机调制解调器业务
  3. 苹果收购个性化新闻电台应用Swell
  4. 谷歌,草色遥看近却无
  5. 从职场“菜鸟”到骨干,程序员小跃有话要说……
  6. R-C3D:Region Convolutional 3D Network for Temporal Activity Detection
  7. 结构光之解相位求深度信息方法总结
  8. 大数据工作流任务调度--有向无环图(DAG)之拓扑排序
  9. ECC和RECC内存条之间的区别
  10. A股实时交易数据API接口(JSON标准格式,Get请求方式)