2016 - 2024

感恩一路有你

MyBatis的一级缓存:什么是它,为什么要使用?

浏览量:2629 时间:2024-06-19 07:45:51 作者:采采

一级缓存是MyBatis中非常有用的一个特性,它可以提高数据库的查询性能。在操作数据库时,我们需要构造SqlSession对象,并在其中使用一个内存区域(HashMap)用于存储缓存数据。当我们执行查询语句时,会将查询结果缓存到这个map中。如果下次再查询时,会先判断之前是否有完全相同的查询,如果有,则直接从缓存中读取,这就是一级缓存的作用。

需要注意的是,如果在第一次查询后,对数据进行了增删改,则该map缓存就会被清空,避免下次查询时出现脏读(即数据被改变,但你从缓存中读取的数据不对)。

举个例子来演示一下,首先我们查询id为1的用户,然后再一次读取,看看是否使用到了一级缓存:

首先我们进入debug来执行第一个查询,可以看到控制台的日志中显示了查询语句,表明这次是查询数据库来得到数据并将其存入缓存中。

然后看看第二次查询相同的数据,可以看到没有再出现查询语句,但是得到的数据是正确的,表明这次数据是从一级缓存中取的。这样就可以不用频繁地访问数据库了。

但是,如果在第一个查询后,修改了数据(此时会清空缓存),那么第二次查询就需要再次访问数据库了,下图两个查询sql都出现了,可以看出调用了两次数据库:

实际上,我们可以发现,SqlSession这个会话非常重要,如果会话关闭了(缓存被清空了),那就什么都没了。同样的,如果我们开启了两个会话:会话1、会话2,会话1刚查询完数据,会话2刚好对这个数据进行修改(此时数据库的数据),那么会话1再查询的时候是从自己会话对象的缓存中取的数据,这时的数据就和数据库的数据不同了(刚才会话2修改过)。

因此,当使用一级缓存时,需要确保在同一个SqlSession中使用。否则,使用的就不是一级缓存了。如果要跨SqlSession使用,则需要使用二级缓存(下次介绍),这点需要注意。

以上就是关于MyBatis的一级缓存的介绍和使用方法。如果本文对您有帮助,请为我们的文章点赞投票。我们的文章均基于平时在项目中遇到的问题积累和总结而来,谢谢阅读。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。