mybatis默认定义了两级缓存 使用map形式
缓存顺序先走二级再找一级再找数据库

一级缓存

默认开启,作用域sqlsession
本地缓存 与数据库同一次会话期间查询拿到的数据会放在本地缓存中,以后如果获取相同值,直接从缓存中拿,不用查询数据库
setting中的localCacheScope 可以禁用一级缓存
失效情况
1.开启多个sqlSession
2.sqlSession相同,查询条件不同
3.sqlSession相同,两次查询之间执行了增删改查操作
4.手动执行了清空缓存 clearCache()方法

二级缓存

局部缓存 基于namespace一个 mapper对应一个二级缓存
一个会话,查询一条数据,这个数据就会放在当前一级缓存中,如果会话关闭,一级缓存中数据就会保存到二级缓存中 不同的sqlSession没有影响
注意:只有会话提交或者关闭,一级缓存中数据才会转到二级缓存

1.首先得开启配置setting 中 cacheEnabled 默认是开启的
2.配置mapper 中 使用
3.数据模型要序列化 实现 serializable接口