Mybatis的缓存机制
Mybatis内置一级缓存与二级缓存,优先查询二级缓存,未命中时查询一级缓存,仍未命中将从数据库中查询
一级缓存
- 又称:会话缓存(默认开启,通常人为不可控)
- 仅当同一个SqlSession、同一个Mapper、执行同样的SQL、SQL中的参数值相同时有效
- 当关闭SqlSession、调用SqlSession的clearCache()、此Mapper执行了任何增删改操作后,自动清除缓存数据
二级缓存
- 又称:namespace缓存(默认全局开启,各namespace未开启)
- 在XML中添加cache标签将开启当前XML的二级缓存,此XML中所有查询默认开启缓存,在上配置useCache="false"可单独关闭。
- 开启了二级缓存的查询功能,返回结果类型必须实现Serializable接口。
- 开启了二级缓存的查询功能,当SQL中的参数值相同时,缓存有效。(无论是否同一个SqlSession)
- 此XML中的任何增删改操作被执行后,自动清除缓存数据
不推荐使用Mybatis的缓存机制,无论是一级缓存还是二级缓存,均会因为执行了增删改后自动清除缓存数据,虽然缓存数据可能与数据库中的数据不一致,但并不是所有数据都需要时刻保证一致性。