美文网首页
springboot下mybatis的缓存

springboot下mybatis的缓存

作者: M_lear | 来源:发表于2023-01-10 16:39 被阅读0次

springboot下mybatis一级缓存是默认开启的,且缓存级别为session(一个sqlsession有一个缓存)。二级缓存需要在mapper文件加cache标签。

首先,
在事务期间,执行的所有mapper方法共用一个sqlsession。
在非事务期间,每执行一个mapper方法都会单独创建一个sqlsession。

那这个一级缓存我理解一般是用不上的。

如果没有事务,每个mapper方法都对应一个新的sqlsession,这种情况自然用不上。
如果有事务,由于事务隔离(mysql默认隔离级别:可重复读,如果是更低的隔离级别,mybatis一级缓存会出现脏数据,即和DB不一致),除非自己修改,那么前后两次相同的查询结果一定一样,这种情况下,事务中一般也不会出现前后两次做相同查询,如果需要直接使用第一次查询的结果就好了。

还有,在事务期间,如果使用mybatis一级缓存,就一定小心不能修改mybatis mapper方法的返回值,因为mybatis一级缓存直接缓存的就是mapper方法的返回值,没有深拷贝,所以,如果有修改,后续相同查询拿到的都是修改后的脏数据。
对于二级缓存,同样需要注意这个问题。

使用二级缓存需要慎重,很容易产生脏数据:
情况一:mapper中有从多个表查询的操作。
情况二:应用分布式部署。

所以,一般情况下不建议使用mybatis的缓存。

相关文章

网友评论

      本文标题:springboot下mybatis的缓存

      本文链接:https://www.haomeiwen.com/subject/hvjvcdtx.html