1、为什么要用缓存?
如果缓存中有数据,就不用从数据库获取,大大提高系统性能。
mybatis提供一级缓存和二级缓存
2、一级缓存:
(1)一级缓存是sqlsession级别的缓存
在操作数据库时,需要构造sqlsession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据
不同的sqlsession之间的缓存区域是互相不影响的。
(2)一级缓存工作原理:
①第一次发起查询sql查询用户id为1的用户,先去找缓存中是否有id为1的用户,如果没有,再去数据库查询用 户信息。得到用户信息,将用户信息存储到一级缓存中。
②如果sqlsession执行了commit操作(插入,更新,删除),会清空sqlsession中的一级缓存,避免脏读
③第二次发起查询id为1的用户,缓存中如果找到了,直接从缓存中获取用户信息
④mybatis默认支持并开启一级缓存。
(3)一级缓存演示
(4)一级缓存失效
1. sqlSession不同
2. 当sqlSession对象相同的时候,查询的条件不同,原因是第一次查询时候一级缓存中没有第二次查询所需要的数据
3. 当sqlSession对象相同,两次查询之间进行了插入的操作
4. 当sqlSession对象相同,手动清除了一级缓存中的数据