缓存:将数据临时存储在存储介质(内存,文件)中,关系型数据库的缓存目的就是为了减轻数据库的压力。
MyBatis提供一级缓存和二级缓存。
一级缓存是SqlSession级别的缓存,在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的SqlSession之间的缓存数据区域(HashMap)是互相不影响的。
二级缓存是mapper级别的缓存,多个SqlSession去操作同一个mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
区别
- 一级是session级别的,二级是sessionFactory级别的
- 工作原理不同,二级缓存是直接将数据反序列化到磁盘上,而一级缓存,访问同一个对象时,不用再去访问数据库
- 二级缓存实现了缓存数据的共享,可控性更强,但容易出现错误数据,不推荐使用。