其他分享
首页 > 其他分享> > 关于Mybatis中的一级缓存,以及二级缓存的初步了解

关于Mybatis中的一级缓存,以及二级缓存的初步了解

作者:互联网

1. mybatis 中一级缓存的作用域:
获取到sqlSession 后到sqlSession.close()

2.mybatis中的二级缓存的作用域:

相当于在一个mapper 中

一级缓存:

一级缓存默认是开启状态,且当执行增删改操作时 会刷新缓存,

当我们执行一个查询语句:

select * from test where id =1

1.第一次查询由于一级缓存中没有该缓存,会通过数据库查询出结果,写入缓存中,再次执行该查询语句则不通过数据库查询,会直接从缓存中取数据。(只针对id 为1 )

2.当我们第一次查询id = 1, 后再次执行查询 id =2,由于缓存中并没有保存 id= 2 的查询结果,则会在数据库中进行查询。

3.当执行完 第一次id = 1 的查询后 我们执行了一次 增\删\改的操作时,再次查询id =1 的时候会发型 重新在数据库中进行了查询,证明:执行增删改操作时 会刷新缓存,

二级缓存:(注意:必须实现序列化)

1.二级缓存需要手动开启,且 二级缓存比一级缓存的作用域更大,可以被对个sqlSession 公用

2.一个sqlSession 会使用Executor对象完成会话操作,那么二级缓存就是在Executor上面做文章,

首先在Executor加上一个装饰者(CachingExecutor),访问就会使用这个装饰者完成操作,首相会判断二级缓存中是否有该查询结果,如果有的话,直接返回缓存结果;

如果缓存中没有,再交给真正的Executor对象来完成查询操作,之后CachingExecutor会将真正Executor返回的查询结果放置到二级缓存中,然后在返回给用户。

一级缓存与二级缓存使用顺序

MyBatis使用了二级缓存,并且你的Mapper和select语句也配置使用了二级缓存,那么在执行select查询的时候,MyBatis会先从二级缓存中取输入,其次才是一级缓存

 

标签:缓存,一级,查询,二级缓存,Executor,Mybatis,id
来源: https://www.cnblogs.com/HardGo/p/16122872.html