mybatis 缓存问题

一级缓存

即session缓存,做用域为 Session,当 Session flush 或 close 以后,该Session中的全部 Cache 就将清空,默认开启。spring

注意 集成spring(使用mybatis-spring)时:缓存

  • 每次查询spring会从新建立SqlSession,因此一级缓存是不生效的。
  • 而当开启事务时,spring会使用同一个SqlSession作查询,因此这个状况下一级缓存是生效的

二级缓存

即全局缓存,其做用域为 Mapper(Namespace),默认关闭。session

如何取消一级缓存

虽然一级缓存带来了性能的提高,可是有时也会形成数据的不许确,并且大部分状况下一级缓存是默认开启的,下面是两个主动关闭一级缓存的方法:mybatis

  • 1.把查询提早到事务以前(以外),这样只解决了个别问题,解决并不完全。
  • 2.在mybatis的mapper xml里配置每次清空缓存flushCache = true:
<select id="selectById" resultType="ClassA" flushCache="true">
    ...
    </select>
    ```
相关文章
相关标签/搜索