MyBatis:MyBatis一二级缓存,你学会了吗?

数据库 其他数据库
如果中间sqlSession去执⾏commit操作(执⾏插⼊、更新、删除),则会清空SqlSession中的⼀级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

一、一级缓存

1、在⼀个sqlSession中,对User表根据id进行两次查询,查看他们发出sql语句的情况。

2、同样是对user表进⾏两次查询,只不过两次查询之间进⾏了⼀次update操作。

3、总结

(1)第⼀次发起查询⽤户id为1的⽤户信息,先去找缓存中是否有id为1的⽤户信息,如果没有,从数据库查询⽤户信息。得到⽤户信息,将⽤户信息存储到⼀级缓存中。

(2)如果中间sqlSession去执⾏commit操作(执⾏插⼊、更新、删除),则会清空SqlSession中的⼀级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

(3)第⼆次发起查询用户id为1的⽤户信息,先去找缓存中是否有id为1的⽤户信息,缓存中有,直接从缓存中获取用户信息

二、⼆级缓存

⼆级缓存的原理和⼀级缓存原理一样,第⼀次查询,会将数据放⼊缓存中,然后第⼆次查询则会直接去缓存中取。

但是⼀级缓存是基于sqlSession的,⽽⼆级缓存是基于mapper⽂件的namespace的,也就

是说多个sqlSession可以共享⼀个mapper中的⼆级缓存区域,并且如果两个mapper的namespace相同,即使是两个mapper,那么这两个mapper中执⾏sql查询到的数据也将存在相同的⼆级缓存区域中。


责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-07-11 09:00:37

依赖配置文件Mybati

2019-08-21 14:34:41

2009-06-18 15:24:35

Hibernate二级

2024-01-02 12:05:26

Java并发编程

2023-08-01 12:51:18

WebGPT机器学习模型

2013-09-08 23:30:56

EF Code Fir架构设计MVC架构设计

2009-09-21 14:59:31

Hibernate二级

2009-09-24 11:04:56

Hibernate二级

2023-04-07 07:42:01

2021-09-03 06:46:34

MyBatis缓存后端

2023-01-31 08:02:18

2024-03-06 08:28:16

设计模式Java

2022-12-06 07:53:33

MySQL索引B+树

2022-06-16 07:50:35

数据结构链表

2022-07-13 08:16:49

RocketMQRPC日志

2023-08-26 21:34:28

Spring源码自定义

2023-07-30 22:29:51

BDDMockitoAssert测试

2023-03-26 22:31:29

2023-05-05 06:54:07

MySQL数据查询

2024-02-02 11:03:11

React数据Ref
点赞
收藏

51CTO技术栈公众号