简介
1.一级缓存是SqlSession级别的缓存。在数据库操作时需要构建sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)之间是互不影响的。一级缓存默认开启不用配置。
2.二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存的开启(实体类必须序列化),然后在配置文件里面配置。
详情总结
1.Mybatis-plus一级缓存:
一级缓存默认开启,属于会话级别,一个会话做多次做相同的查询会开启,如果对查询的数据进行更新,删除等操作时,再次查询会从数据库查询而不用一级缓存。
2.Mybatis-plus二级缓存:
二级缓存的开启:
1)除了在配置文件中打开开关mybatis-plus.configuration.cache-enabled=true
2)还要再mapper对应开启,<cache/>
3)对应实体类实现Serializable接口
如果某个sql语句要禁用二级缓存,需要在具体的xml的sql语句定义处加上useCache="flase"
其他
1.在mapper的同一个namespace中,如果有其他的inset,update,delete操作后需要刷新缓存,如果不执行刷新缓存操作会出现脏读。
2.设置statement配置中flushCache="true"属性,可以实现二级缓存的刷新,false可能出现脏读。
openSession.clearCache()实现对一级缓存的刷新。