Mybatis缓存

Mybatis有两级缓存

一级缓存(本机缓存):一级缓存是一直开启的。sqlSession级别缓存的Map

  与数据库同一次回话期间(session没有断开)查询到的数据会放在本地缓存(一级缓存)

  之后如果获取相同的数据,直接从缓存中拿,没必要再去查询数据库

  

  

一级缓存失效情况(不使用当前一级缓存的情况)

1、sqlSession不同,一级缓存失效

2、sqlSession相同,查询条件不同,一级缓存没有数据

3、sqlSession相同,两次查询期间,添加了增删改操作(这次增删改可能对缓存数据有修改)

4、sqlSession相同,手动清空了缓存。session.clearChache()

 

二级缓存(全局缓存):基于namespace级别的缓存

工作机制:

  1、一个会话,查询一条数据,这个数据会放在当前会话的一级缓存中

  2、如果会话关闭,一级缓存的数据会保存到二级缓存中;新的会话查询信息,可以参照二级缓存的内容。

  3、不同的namespace查出的数据放在自己的缓存中

使用:

  1、开启全局二级缓存配置:<setting name=”cacheEnabled” value=”true”><setting>

  2、mapper.xml中配置使用二级缓存

  <cache></cache>

  如果有工作空间配置过了,可以使用<cache-ref namespase>配置和工作空间相同的缓存机制

  3、我们的POJO需要实现序列化接口

 

和缓存有关的设置

1<select> useCache属性设置是否使用二级缓存

2、每个增删改标签:flushCache属性,每次增删改操作后就会清除缓存,一级和二级缓存中都会被清空。

3session.clearCache只清除一级缓存

4、全局配置文件setting标签的cacheEnable属性;启用二级缓存

5、全局配置文件setting标签的localCacheScope属性;本地缓存作用域;

(一级缓存SESSION):当前会话的所有数据保存在会话缓存中

STATEMENT:可以禁用一级缓存

 

 

posted @ 2017-11-16 10:18  宇的季节  阅读(211)  评论(0编辑  收藏  举报