什么时候会用到缓存?
在执行过一次sqlSession会话查询后,Mybatis除了返回结果以外还会把查询到的结果存储到一级缓存中,当再次执行相同的查询时,Mybatis将不再进入数据库查,直接将结果从缓存中取出来。
Mybatis缓存
Mybatis缓存分为一级缓存和二级缓存,图示
一级缓存
通俗理解为每个sqlSession的缓存,也就是单个的sqlSession中的sql语句查询后,会将查询结果存入一级缓存中,可以理解为以每个sqlSession为单位进行一级缓存的划分。
二级缓存
通俗理解为一个Mapper中每个sqlSession执行查询以后存入的地方就是二级缓存,但是注意并不是以Mapper为单位进行二级缓存的划分,而是以Mapper中的namespace为单位进行二级缓存的划分。
Mybatis查询机制
接下来我们再来捋一捋Mybatis的查询机制,当Mybatis执行sql查询语句时:
二级缓存==>一级缓存==>进入数据库查找
在执行查询时,Mybatis会依照上述顺序进行查询,只有当两个缓存中都找不到结果时才会进入数据库查询
优缺点
优点:可以作为优化数据查询的切入点
缺点:不论是一级缓存还是二级缓存,只要sqlSession会话一旦对数据库进行了修改操作(即删除,增加,修改),那么缓存中的结果将全部清除
Mybatis中默认开启一级缓存,关闭二级缓存,如需二级缓存,则要手动开启
开启方式请移步: