mybatis缓存:在内存中临时存储数据,速度快,可以减少数据库的访问次数
经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中
一级缓存
默认开启,是SqlSession的缓存,SqlSession对象中维护了一个Map集合,用于存储相互的缓存数据。查询的时候,先从SqlSession的缓存中查找,如果有,直接返回。如果没有,查询数据库
原理分析
- 一级缓存底层使用的是Map集合,key存储的是执行的SQL语句,value存放的是查询的对象
- 一级缓存的生命周期和SqlSession的生命周期相同,SqlSession对象关闭,一级缓存也会关闭
清空缓存
- session.clearCache(),调用该方法可以清空缓存
- 调用SqlSession的update、insert、delete、commit和close等方法的时候也会清空缓存
二级缓存
默认不开启,是对一级缓存的增强,因为一级缓存的生命周期非常短暂
同一条执行语句返回对象的地址不同,但是确实只会执行一次sql。原因:二级缓存中存储是数据,不是对象
注意:二级缓存的生效必须要调用session.commit()或者session.close()方法才能生效