MyBatis第六讲:MyBatis缓存

这篇具有很好参考价值的文章主要介绍了MyBatis第六讲:MyBatis缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

八、MyBatis缓存机制

MyBatis 提供了一级缓存和二级缓存的支持。默认情况下,MyBatis 只开启一级缓存。

8、1MyBatis一级缓存

一级缓存是基于MyBatis自带的 HashMap 本地缓存,作用范围为 SqlSession 域内。当刷新或者关闭之后,该 SqlSession 中所有的缓存就会被清空。 在参数和 SQL 完全一样的情况下,我们使用同一个 SqlSession 对象调用同一个 mapper 的方法,往往只执行一次 SQL。因为使用 SqlSession 第一次查询后,MyBatis 会将其放在缓存中,再次查询时,如果没有刷新,并且缓存没有超时的情况下,SqlSession 会取出当前缓存的数据,而不会再次发送 SQL 到数据库。但是由于 SqlSession 是相互隔离的,所以如果你使用不同的 SqlSession 对象,即使调用相同的 Mapper方法,MyBatis 还是会再次发送 SQL 到数据库执行,返回结果。

8、2MyBatis二级缓存

二级缓存是全局缓存,作用域超出 SqlSession 范围之外,缓存在 SqlSessionFactory 层面上能够提供给各个 SqlSession 共享。

8、2、1配置二级缓存

在MyBatis核心配置文件中设置二级缓存

<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>
8、2、2在mapper中设置二级缓存

在 mapper 文件中设置缓存,默认不开启缓存。需要注意的是,二级缓存的作用域是针对 mapper 的 namescape 而言,即只有再次在 namescape 内的查询才能共享这个缓存.

<!--
在mapper配置文件中加入cache标签,用来设置二级缓存
eviction属性:设置缓存回收策略【
    LRU:使用较少,移除最长时间不用的对象;
    FIFO:先进先出,按对象进入缓存的顺序来移除它们(常用);
    SOFT:软引用,移除基于垃圾回收器状态和软引用规则的对象;
    WEAK:弱引用,更积极地移除基于垃圾收集器状态和弱引用规则的对象。
】
flushInterval:设置刷新间隔时间,单位为毫秒
size:引用数目,正整数,代表缓存最多可以存储多少个对象,不宜设置过大
readOnly:只读,默认值为 false,意味着缓存数据只能读取而不能修改
-->
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />
8、2、3在查询中设置二级缓存

在 mapper 文件配置支持缓存后,如果需要对个别查询进行调整,可以单独设置缓存文章来源地址https://www.toymoban.com/news/detail-503304.html

<!--设置useCache属性,表示单独查询使用缓存-->
<select id="findAll" resultMap="bookType" useCache="true">
  select b.id,b.name,b.price,l.lid,l.userId,l.bookId from book b left join log l on b.id=l.bookId where b.id=1
</select>

到了这里,关于MyBatis第六讲:MyBatis缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis 中的一级缓存与二级缓存

      缓存的意义是将用户经常查询的数据放入缓存(内存)中去,用户去查询数据的时候就不需要从磁盘(关系型数据库)中查询,直接从缓存中查询,从而提高了查询效率,解决了高并发中系统的性能问题。Mybatis中提供一级缓存与二级缓存。   Mybatis的一级缓存是一个

    2024年02月08日
    浏览(30)
  • Mybatis一级缓存和二级缓存(带测试方法)

    目录 相关导读 一、什么是缓存  二、Mabtis一级缓存 (1)测试一级缓存

    2023年04月08日
    浏览(68)
  • MyBatis缓存-提高检索效率的利器--一级缓存

    😀前言 本篇博文是关于MyBatis一级缓存的介绍使用和缓存失效情况分析,希望能够帮助到您😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博

    2024年02月14日
    浏览(31)
  • mybatis分页、延迟加载、立即加载、一级缓存、二级缓存

    分类 : 使用Limit,来进行分页;物理分页 使用RowBounds集合来保存分页需要数据,来进行分页;逻辑分页;本质是全查,只是显示部分 使用分页插件来进行分页;物理分页 方式一: 方式二: 方式三: 首先导入两个jar包: 配置插件: 调用: 字段 含义 pageNum 当前页的页码 pa

    2024年01月18日
    浏览(46)
  • Mybatis的一级、二级缓存怎样使用?

    一级缓存基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存。 二级缓存是基于namespace和mappe的作用域起作用的,不是依赖于SQL session,默认也是采用PerpetualCache,HashMap存储 当某一个作用域

    2024年02月16日
    浏览(32)
  • 手敲Mybatis(16章)-一级缓存功能实现

    这一节的目的主要是实现SqlSession级别的缓存,也就是一级缓存,首先看下图一,用户可以通过设置来进行是否开启一级缓存,不设置的化默认开启一级缓存,localCacheScope=SESSION为要设置一级缓存,localCacheScope=STATEMENT为不要设置一级缓存,(所以后面在清理缓存时会进行判断,

    2024年02月01日
    浏览(32)
  • Mr. Cappuccino的第55杯咖啡——Mybatis一级缓存&二级缓存

    缓存越小,查询速度越快,缓存数据越少 缓存越大,查询速度越慢,缓存数据越多 在多级缓存中,一般常见的是先查询一级缓存,再查询二级缓存,但在Mybatis中是先查询二级缓存,再查询一级缓存。 在Mybatis中,BaseExecutor属于一级缓存执行器,CachingExecutor属于二级缓存执行

    2024年02月14日
    浏览(35)
  • mybatis的一级二级缓存详解及源码解剖

    一级缓存是指在同一个SqlSession中,对于相同的查询语句和参数,第一次查询的结果会被缓存到内存中,后续的查询会直接从缓存中获取结果,而不会再次查询数据库。一级缓存是MyBatis默认开启的,可以通过在SqlSession中调用clearCache()方法来清空缓存。 二级缓存是指在多个Sq

    2024年02月05日
    浏览(40)
  • MyBatis-Plus一级缓存和二级缓存-redis解决缓存的脏数据

    什么是缓存? 1.存在内存中的临时数据 2.将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库 数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。 为什么使用缓存 减少和数据库的交互次数,减少系统开

    2024年02月09日
    浏览(32)
  • 深入剖析MyBatis缓存机制

    第1章:引言 大家好,我是小黑。今天我们要聊的是MyBatis的缓存机制。作为Java开发中经常使用的持久层框架,MyBatis以其灵活性和简便性而广受欢迎。但你知道吗,很多时候,正是因为这些特点,我们需要更深入地理解它的内部工作原理,尤其是缓存机制。这不仅能帮助我们

    2024年01月21日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包