MyBatis的缓存机制
用过MyBatis的小伙伴都应该知道在MyBatis中有两种缓存机制,分别是MyBatis的一级缓存和MyBatis的二级缓存,那么到底什么是MyBatis的一级缓存呢,接下来我们及一起探讨下MyBatis的缓存机制吧...
MyBtis的一级缓存:
在MyBatis中如果不配置MyBatis的缓存机制的话那么MyBatis他默认的就是开启的一级缓存接,接下来我们就来根据下面的图来分析下到底什么什么是一级缓存吧
我相信这幅MyBatis的一级缓存执行图已近很清楚了,但是我还是想解释下画的这幅图是神马QVQ
根据这张流程图我们可以知道当客户端在请求数据的时候首先他会去找寻找SqlSession然后SqlSession会去Executor中寻找该条Sql语句是否存在请求的缓存数据,如果存在那么该请求就直接从缓存中取出数据然后将数据返回给Client(客户端),如果并不存在缓存的数据,该请求便会直接请求数据库从数据库中查询数据,将查询的结果返回,返回同时将返回的结果存储在缓存中,如果下次同样的Sql再次请求数据的话便会直接请求缓存中的数据,这就是MyBatis的一级缓存机制....
在这里有几个点比较关键:
1.相同的SQL请求数据
2.MyBatis请求不会立刻请求数据库
3.如果MyBatis请求了数据库那么,在返回数据的时候MyBatis会将数据缓存
怎么判断某两次查询是完全相同的查询?
对于MyBatis来说以下条件全部相同,就是同一查询:
2.1 传入的statementId
2.2 查询时要求的结果集中的结果范围
2.3. 这次查询所产生的最终要传递给JDBC java.sql.Preparedstatement的Sql语句字符串(boundSql.getSql() )
2.4 传递给java.sql.Statement要设置的参数值
参考:
https://www.cnblogs.com/happyflyingpig/p/7739749.html
好了这就是我对MyBatis的一点认识如果觉得有什么问题欢迎指点,谢谢,明天在撸撸MyBatis的二级缓存吧......