两级缓存:
一级缓存:(本地缓存):sqlSession级别的缓存。一级缓存是一直开启的
与数据库同一次会话期间查询到的数据会放到本地缓存中。
一级缓存失效情况:(没有使用到当前一级缓存的情况,效果就是,还需要再向数据库发出查询)
1、sqlSession不同
2、sqlSession相同,查询条件不同。(当前一级缓存中还没有这个九局)
3、sqlSession相同,两次查询之间执行了增删改操作。
4、sqlSession相同,手动清除了缓存(缓存清空)
clearCache()方法 (sqlSession.clearCache())
二级缓存:(全局缓存):基于namespace级别的缓存,一个namespace对应一个二级缓存
工作机制:
1、一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中。
2、如果会话关闭,一级缓存中的数据会被保存到二级缓存中。新的会话查询信息,就可以参照二级缓存。
3、不同的namespace查出的数据会放在自己对应的缓存中(map)
使用:
1、在配置文件中,开启二级缓存
2、去mapper.xml文件中配置使用二级缓存
3、POJO类需要实现序列化接口
(即bean类要实现Serializable接口)