MyBatis什么时候不走 缓存??
一级缓存
sqlSession不是同一个对象,肯定就不走缓存了,
ThreadLocal只能确保同一个会话,
当new sqlSessionFactoryBuild新的会话,新的,那么会有2个不同的sqlSession,那么缓存失效
查询条件不一样,肯定也不走缓存
这个才是根源所在!!
什么时候一级缓存失效?
第一次DQL和第二次DQL之间你做了以下两件事中的任意一件,都会让一级缓存清空:
1.执行了sqlSession的clearCache方法,这是手动清空缓存。
2.执行了INSERT DELETE UPDATE语句。
二级缓存的范围是
qlSessionFactory。
使用二级缓存需要具备以下几个条件:
1.<setting name="cacheEnabled"value="true">全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。默认就是true,无需设置
2.在需要使用二级缓存的SqlMapper.xml文件中添加配置:<cache/>
3.使用二级缓存的实体类对象必须是可序列化的,也就是必须实现java.io.Serializable接口
4.SqlSession对象关闭或提交之后,一级缓存中的数据才会被写入到二级缓存当中。此时二级缓存才可用。
我也不懂。。。