Mybatis中为什么要使用缓存?
- 首先不管是增、删、改,我们都是必须和数据库进行交互才能修改其中的数据,但是对于查询来说,并没有改变数据库中内容,那么我们还是像之前一样,每次查询数据都要访问数据,其实这样的效率很低,所以我们就使用了缓存机制
Mybatis中的缓存机制解决了什么问题?
- 减少与数据库的交互,从而提高程序执行的效率
Mybatis中有几级缓存
- 有两种缓存机制:一级缓存和二级缓存
- Mybatis中:一级缓存默认开启,二级缓存默认关闭
一级缓存
- 其缓存作用域在sqlSession中,
何时进行缓存?
- 第一次查询数据库,会将sql语句以及查询到的结果以HashMap(K,V)的形式保存到该sqlSession中,下次查询的时候直接从缓存中取
- 一级缓存没有过期时间,只有生命周期
二级缓存
- 基于mapper文件的namespace
-它指的是Mybatis中SqlSessionFactory对象的缓存,由同一个SqlSessionFactory对象创建的sqlSession共享其二级缓存何时进行缓存?
- 在关闭sqlSession(close或者commit),才会将该sqlSession一级缓存中的数据加到namespace的二级缓存中
- 二级缓存有过期时间,1小时后自动清空,更新二级缓存会重新计时
执行流程
当Mybatis调用dao层中的接口查数据时,先去二级缓存中找,找不到的话去一级缓存中,要是都没有的话就去数据库中查找