码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis 一级缓存

时间:2020-09-17 16:49:28      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:缓存   data   方法   执行   img   mamicode   没有   关闭   ssi   

一级缓存

  它指的是mybatis中sqlsession对象的缓存。

  当我们执行查询后,查询的结果会同时存到sqlsession为我们提供的一块区域,该区域的结构是个map。

  当我们再次查询同样的数据,这样mybatis会去sqlsession中查看是否有,有的话会直接拿出来用。

  当sqlsession消失时,mybatis的一级缓存也就消失了。

  我们用一个测试类看看效果

技术图片

  运行一下我们发现只发起了一次sql查询,也就是说第二次是从缓存查询的数据

技术图片

  如果说第一次查询后我们关闭了sqlsession对象,那么就意味着缓存区域被关闭了

技术图片

  这个时候两个user对象就不是同一个了,返回的是false

技术图片

  且发起的查询是两次

技术图片

   除了关闭sqlsession,sqlsession还提供了clearCache方法清空缓存 

分析

  如果涉及数据的更新,mybatis是如何保持数据的一致呢?

  我们在两次查询中加入更新的操作

技术图片

   运行一下我们可以看到,第二次查询没有在缓存里取,而是向数据库发起了新的查询

技术图片

  这是为什么呢?

  那是因为MyBatis调用sqlsession的修改,添加,删除,commit,close方法会清空一级缓存。

  所以上面我们调用了updata方法,sqlsession的一级缓存就被清除了。

MyBatis 一级缓存

标签:缓存   data   方法   执行   img   mamicode   没有   关闭   ssi   

原文地址:https://www.cnblogs.com/qq2210446939/p/13624479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!