首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

深入浅出mybatis之缓存机制

select * from test where id = #{id} MyBatis默认缓存设置 在MyBatis中,关于缓存设置的参数一共有2个:localCacheScope...下图为MyBatis中执行器的类图。 ? 其次,再来跟踪一下参数localCacheScope的使用场景。 如下为MyBatis执行查询的时序图: ?...OK,到这里我们就可以对MyBatis中控制缓存的2个参数做一个浅显的总结: (1)参数cacheEnabled控制MyBatis使用的执行器类型 (2)参数localCacheScope控制的是BaseExecutor...内部的缓存策略 缓存实现原理分析 既然在MyBatis中是通过cacheEnabled和localCacheScope这2个参数来控制缓存的,那么如下的实现原理分析也基于这2个参数进行。...参数localCacheScope控制的缓存策略 在MyBatis的默认缓存设置中我们已经知道,参数cacheEnabled控制的是不同的执行器类型,而从MyBatis的执行器类图中又可以看出,当参数cacheEnabled

56730

一文彻底读懂优秀开源产品MyBatis一级缓存设计!

3、对装饰器的分类 - 一级缓存的特点 - 1、一级缓存默认是开启的,而且不能关闭 至于一级缓存为什么不能关闭,MyBatis 核心开发人员做出了解释: MyBatis的一些关键特性(例如通过...CacheKey,所以目前MyBatis不支持关闭一级缓存。...虽然我们不能关闭一级缓存,但是我们可以更改他的作用范围: MyBatis提供了一个配置参数localCacheScope,用于控制一级缓存的级别,该参数的取值为SESSION、STATEMENT,当指定...localCacheScope参数值为SESSION时,缓存对整个SqlSession有效,只有执行DML语句(更新语句)时,缓存才会被清除。...当localCacheScope值为STATEMENT时,缓存仅对当前执行的语句有效,当语句执行完毕后,缓存就会被清空。

49630

MyBatis之缓存避坑: MyBatis的一级缓存、二级缓存的实现分析与分布式环境下数据一致性问题

所以MyBatis也提供了缓存 :一级缓存和二级缓存。 MyBatis提供的缓存默认是本地缓存,分布式环境下可能会带来数据一致性问题,当然可以扩展为分布式缓存解决。...MyBatis的一级缓存是默认开启而且不能关闭。...() 为LocalCacheScope.SESSION,见配置: https://mybatis.org/mybatis-3/configuration.html#settings 即:默认情况下查询前和后都不会清空一级缓存.../mybatis-3/issues/1278 在分布式环境下,一定要将MyBatislocalCacheScope属性设置为STATEMENT,查询时清空一级缓存,避免其他应用节点执行SQL更新语句后...一级缓存默认开启而且不能关闭,可以设置localCacheScope属性设置为STATEMENT,查询时清空一级缓存。

1.2K20

后端:MyBatis缓存知识介绍

今天给大家分享一下MyBatis缓存知识介绍,希望对大家日常的开发当中能有所帮助!...一、MyBatis一级缓存 1、一级缓存介绍 当我们的程序MyBatis开启一次和数据库的会话,MyBatis会自动创建出一个SqlSession对象表示这一次数据库的会话。...开启一级缓存 MyBatis的配置文件加上如下: 注意:localCacheScope 值有两个 SESSION...MyBatis一级缓存采用HashMap性能较差 分布式环境下对数据库操作容易引起脏数据,不推荐开启MyBatis一级缓存 二、MyBatis二级缓存 1、二级缓存介绍 MyBatis一级缓存生命周期是一个...2、当Spring和MyBatis整合时,每次查询之后都要进行关闭sqlsession,关闭之后数据被清空。所以MyBatis和Spring整合之后,一级缓存是没有意义的。

57730

年轻人,告诉我 :Mybatis 源码中,用了多少种设计模式?

好啦,不扯淡了,接下来小傅哥就以《手写Mybatis:渐进式源码实践》的学习,给大家列举出这10种设计模式,在Mybatis框架中都体现在哪里了!...SESSION protected LocalCacheScope localCacheScope = LocalCacheScope.SESSION; // 映射注册机 protected...场景介绍:关于建造者模式在 Mybatis 框架里的使用,那真是纱窗擦屁股,给你漏了一手。...queryStack--; } if (queryStack == 0) { if (configuration.getLocalCacheScope() == LocalCacheScope.STATEMENT...如果你也想有这样酣畅淋漓的学习,千万别错过傅哥为你编写的资料《手写Mybatis:渐进式源码实践》目录如图所示,共计20章 《手写Mybatis:渐进式源码实践》 - END -

37960

MyBatis源码阅读(十) --- 一级缓存、二级缓存工作原理

同样的,Mybatis里面也提供了缓存功能,包括一级缓存和二级缓存。本篇文章我们将总结Mybatis的一级缓存、二级缓存怎么用的以及分析它们的作用域、实现原理等。...如果要关闭一级缓存的功能,我们可以在mybatis-config.xml中的settings标签中将这个配置设置成Statement类型的:localCacheScope默认是SESSION的。...//有两种取值:SESSION和STATEMENT,默认是SESSION //Configuration类成员属性: protected LocalCacheScope localCacheScope...= LocalCacheScope.SESSION; 如果某个select标签查询不需要缓存,在select...); } // issue #601 deferredLoads.clear(); if (configuration.getLocalCacheScope() == LocalCacheScope.STATEMENT

14510
领券