MyBatis 缓存及其作用域

一级缓存:

作用域在一个SqlSession中(可能有多个或者一个sql执行)

在同一个会话中执行sql语句时会先在一级缓存中查找这个sql是否被执行且存储过执行结果,若有则直接返回,若无则查询数据库。

存储方式是:HashMap、key 为 hashCode+sqlId+Sql 语句。value 为 从查询出来映射生成的 java 对象

默认开启一级缓存

会话期间如果有除查询外的其他sql语句提交后会直接清空缓存、会话结束也会清空缓存。

一个sqlSession过程:

@Testpublic void test(){//第一步:获得SqlSession对象SqlSession sqlSession = MybatisUtils.getSqlSession();// 方式一:getMapperUserDao mapper = sqlSession.getMapper(UserDao.class);// 调用我们编写的接口方法List<User> userList = mapper.getUserList();for (User user : userList) {System.out.println(user);}// 关闭流对象sqlSession.close();}

二级缓存

​ Mybatis的二级缓存是指mapper映射文件(或者说是一个接口文件,Mapper文件相对于接口文件的实现)。二级缓存的作用域是同一个nameSpace下的mapper映射文件内容,多个SqlSession共享。

​ 不同 的 sqlSession 两次执行相同 namespace 下的 sql 语句且向 sql 中传递参数也相同即最终执行 相同的 sql 语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从 缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis 默认没有开启二级缓存 需要在 setting 全局参数中配置开启二级缓存。

查询的顺序: 二级缓存 => 一级缓存 => 数据库

只能在一个命名空间下使用二级缓存

  • 由于二级缓存中的数据是基于namespace的,即不同namespace中的数据互不干扰。在多个namespace中若均存在对同一个表的操作,那么这多个namespace中的数据可能就会出现不一致现象。

在单表上使用二级缓存

如果一个表与其它表有关联关系,那么久非常有可能存在多个namespace对同一数据的操作。而不同namespace中的数据互补干扰,所以就有可能出现多个namespace中的数据不一致现象。
查询多于修改时使用二级缓存

在查询操作远远多于增删改操作的情况下可以使用二级缓存。因为任何增删改操作都将刷新二级缓存,对二级缓存的频繁刷新将降低系统性能。

MyBatis面试:
https://blog.csdn.net/javalingyu/article/details/124739040

MyBatis 缓存及其作用域相关推荐

  1. MyBatis复习笔记6:MyBatis缓存机制

    MyBatis缓存机制 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率. MyBatis系统中默认定义了两级缓存. 一级缓存和二级缓存. 默认情 ...

  2. 实际测试例子+源码分析的方式解剖MyBatis缓存的概念

    前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:79 ...

  3. mybatis缓存机制

    文章目录 缓存介绍 一级缓存 二级缓存 二级缓存使用步骤 二级缓存和一级缓存的区别: 缓存介绍 缓存主要是对查询起作用,减轻数据库的压力,提高数据库的性能 mybatis中提供了一级缓存.二级缓存 一 ...

  4. MyBatis学习总结(七)——Mybatis缓存

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

  5. mybatis 缓存总结以及遇到的问题

    转载自https://blog.csdn.net/yin767833376/article/details/80537695 一级缓存 MyBatis 默认开启了一级缓存,一级缓存是在SqlSessi ...

  6. MyBatis缓存通俗易懂

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

  7. Mybatis系列(四):Mybatis缓存

    一.MyBatis缓存介绍 MyBatis 提供了一级缓存和二级缓存的支持        1. 一级缓存: 默认开启,基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...

  8. 五分钟,带你彻底掌握 MyBatis缓存 工作原理

    作者:双子孤狼 blog.csdn.net/zwx900102/article/details/108696005 前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的 ...

  9. MyBatis学习总结(7)——Mybatis缓存

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

最新文章

  1. 【Linux入门到精通系列讲解】一些基础问题
  2. python polar contour_Python将2darray的最后一行和第二列添加到最后位置 - Polar Contour图...
  3. linux分区语言,Linux磁盘分区(9)-Go语言中文社区
  4. 合并两个有序数组(双/三指针)
  5. open函数返回-1_python常用函数大总结
  6. luogu1024 一元三次方程求解
  7. 对象的序列化----将对象转化成二进制数据流
  8. c/c++入门教程 - 2.4.5 c++运算符重载(加号、左移、递增、赋值、关系、函数调用)
  9. Python Cookbook(第3版)pdf
  10. PHP7语法知识(三):时间与日期、表单、类与对象、正则表达式、错误异常处理、图像处理...
  11. python吃显卡还是内存条_用游戏本打游戏是显卡重要还是内存重要?
  12. 网狐大厅介绍页js脚本错误
  13. 如何把b站的下载视频转码为MP4格式
  14. kuangbin 简单搜索 A 棋盘问题
  15. vtk-m的安装与配置
  16. 幼儿园故事导入语案例_幼儿园大班语言故事
  17. 【基础系列】赏析刘洪普《PyTorch深度学习实践》与《实战:基于CNN的MNIST手写数字识别》(Python版)
  18. ios点击推送闪退_iOS 13.4 Beta 4 发布,闪退问题修复!
  19. mysql的主句与从句_什么是主句,什么是从句
  20. Unity:锚点详解

热门文章

  1. 【Linux编程环境】mount虚拟机ssh登录跳转路径
  2. 政策来了|四川省2023年度企业创新主体培育申报奖补、时间、条件、材料及流程
  3. 电子传真将推动企业无纸化办公进程
  4. Xshell中文乱码解决办法
  5. linux 虚拟终端软件下载,Linux Mint 20中安装最快的终端模拟器Alacritty
  6. 怎么查看html格式的文件在哪里,网页缓存文件在哪里?如何查看网页缓存文件?...
  7. Sklearn_工具--2SKlearn介绍
  8. NPOI修改excel 的工作表名称
  9. php cookie被赋值,php删除cookie反倒被赋值为deleted 解决办法
  10. CCNP350-401学习笔记(251-300题)