一、缓存介绍。

Mybatis提供了缓存服务,以减缓数据库压力;

Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图:

 

  1、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

  2、二级缓存是Mapper(namespace)级别的缓存。多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

二、一级缓存

三、二级缓存。

  

  二级缓存的颗粒度是Mapper级别;

  

四、二级缓存问题。

  问题:当查询student表与teacher联表查询,第一次查询出来并缓存到二级缓存中,现在更新teacher表,再次查询student表与teacher联表,调取二级缓存,发现刚才更新的数据并未更新;

  解决方法:当BMapper执行对BTable的update操作时,指定刷新 ACache中的 selectATableWithJoin语句产生的缓存;mybatis-enhanced-cache 插件就是解决这个问题的。

Mybatis二级缓存问题的更多相关文章

  1. mybatis二级缓存应用及与ehcache整合

    mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存. 1.开启mybatis的二级缓存 在核心配 ...

  2. 深入了解MyBatis二级缓存

    深入了解MyBatis二级缓存 标签: mybatis二级缓存 2015-03-30 08:57 41446人阅读 评论(13) 收藏 举报  分类: Mybatis(51)  版权声明:版权归博主所 ...

  3. MyBatis二级缓存配置

    正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 Mybatis二级缓存是SessionFactory,如果两次查询基于同一个SessionFactory,那么就从二级缓存 ...

  4. mybatis二级缓存

    二级缓存区域是根据mapper的namespace划分的,相同namespace的mapper查询数据放在同一个区域,如果使用mapper代理方法每个mapper的namespace都不同,此时可以理 ...

  5. 如何细粒度地控制你的MyBatis二级缓存(mybatis-enhanced-cache插件实现)

    前几天网友chanfish 给我抛出了一个问题,笼统地讲就是如何能细粒度地控制MyBatis的二级缓存问题,酝酿了几天,觉得可以写个插件来实现这个这一功能.本文就是从问题入手,一步步分析现存的MyBa ...

  6. MyBatis 二级缓存全详解

    目录 MyBatis 二级缓存介绍 二级缓存开启条件 探究二级缓存 二级缓存失效的条件 第一次SqlSession 未提交 更新对二级缓存影响 探究多表操作对二级缓存的影响 二级缓存源码解析 二级缓存 ...

  7. Springboot整合Ehcache 解决Mybatis二级缓存数据脏读 -详细

    前面有写了一篇关于这个,但是这几天又改进了一点,就单独一篇在详细说明一下 配置 application.properties ,启用Ehcache # Ehcache缓存 spring.cache.t ...

  8. Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存

    本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...

  9. Mybatis 二级缓存应用 (21)

    [MyBatis 二级缓存] 概述:一级缓存作用域为同一个SqlSession对象,而二级缓存用来解决一级缓存不能夸会话共享,作用范围是namespace级,可以被多个SqlSession共享(只要是 ...

  10. 使用redis做mybaties的二级缓存(2)-Mybatis 二级缓存小心使用

    Mybatis默认对二级缓存是关闭的,一级缓存默认开启: 下面就说说为什么使用二级缓存需要注意: 二级缓存是建立在同一个namespace下的,如果对表的操作查询可能有多个namespace,那么得到 ...

随机推荐

  1. docker和常用的中间件安装汇总

    一.背景:近期整理环境,汇总了下docker 安装常用的中间件,方便我们自己搭建个人的开发环境,做个记录 1.首先是docker 本身(centos)的安装: # 旧版本卸载 sudo yum rem ...

  2. react 脚手架搭建项目 报错C:\Program Files\nodejs\node_cache\_logs\2022-12-28T14_38_28_286Z-debug-0.log

    报错内容: 解决方法: 第一步: 删除C:\Program Files\nodejs\node_cache\_logs 目录下所有文件 第二步:切换镜像 npm config set registry ...

  3. 时间处理及interval函数运用

    MySql时间操作1.interval的说明1.1.当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果4:原理:10为被比较数,后面1,3,5,7为 ...

  4. PLSQL中文乱码问题(显示问号)解决办法

    select userenv('language') from dual; 在环境变量的系统变量中添加配置: NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16GBK 这个 ...

  5. Cascader 级联选择器 数据不回显

    这次的问题原因主要是因为  数据存在于两张表  并且索引的字段不同   一个为id(int)一个为字符(string) 在做修改操作数据回显的时候会导致  后端返回的数组中一个为字符一个为bumber ...

  6. WPF中向下拉框中绑定枚举体

    1.枚举绑定combox的ItemsSourceItemsSource绑定的是个集合值,要想枚举绑定ItemsSource,首先应该想到的是把枚举值变成集合. 方法一:使用资源里的ObjectData ...

  7. 前端将JSON数据格式化显示

    很简单 1 formatJsonData(jsonData) { 2 var smapleDetailData = JSON.stringify(JSON.parse(jsonData), null, ...

  8. mongodb删除指定字段

    db.getCollection('geoServer').update({},{$unset:{longitude:null,latitude:null}},{ multi: true}) 实测有效 ...

  9. 我的第一周C语言作业

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2 这个作业要求在哪里 https://edu.cnblogs.com/campus/zs ...

  10. 如何在matlab中快速绘制一个函数的图像

    在malab绘制曲线图,并在x,y轴上加上说明 直接贴代码 clear,clck=1:1:10;y1=pi./atan(sqrt(k))-1;plot(k,y1)xlabel('Rz');ylabel ...