查询缓存:缓存的底层实现是一个Map,Map的value是查询结果,Map的key即查询依据,使用的ORM框架不同,查询依据是不同的
MyBatis的查询依据是:sql的id+sql语句
Hibernate的查询依据是:查询结果对象的id
增删改操作都会清空一级缓存,无论是否提交。
增删改同样会清空二级缓存《可以在insert语句中设置使增删改不对其产生影响》
(对于二级缓存的清空,实质上是对所查找的key对应的value置为null,而并非将<key,value>对,即Entry对象删除)
所以从DB中进行select 查询的条件,即缓存中不存在需要的数据
1)缓存中根本就不存在这个key
2)缓存中存在该key所对应的Entry对象,但其value为null