关于mybatis的缓存网上有不少相关的文章,本人首先是看过文章,可是本着学习态度和加深理解,如下是我的跟踪源码的记录。html
缓存分三种,1)一级缓2)二级缓存(通常指myatis内置的实现缓存方式)3)引入第三方缓存(本质上就是二级缓存的一种实现方式),引用http://blog.csdn.net/grhlove123/article/details/47808025数据库
1) 一级缓存缓存
1 首先一级缓存也就是查询缓存,所谓的查询缓存其实就是一个HashMap<Object,Object>mybatis
2 整个查询缓存的流程,也就是map的数据的存入、获取和更新学习
① 首先缓存的存入和获取,在每次查询以前mybatis是先去缓存中根据拼接出来的key来查找数据,当没有找到时,将执行数据库查询,而后将结果集存入缓存,以下图源码截图.net
图 1-1htm
图 1-2blog
② 缓存的更新是在执行更新数据(包含增删改)操做时清除全部查询缓存get
图 2-1源码
图 2-2
2)二级缓存
1 二级缓存默认全局开启,可是局部不开启,引用https://www.cnblogs.com/QQParadise/articles/5109633.html
二级缓存其实也是HashMap而且缓存数据的存入、获取和更新(包含增删改)和一级缓存同样,可是这里是两个HashMap,首先是mybatis内置不少种实现方式,第一个HashMap就是用来存放执行实现方式的缓存,第二个就是存放数据的,以下图
图 3-1
图 3-2
图 3-3