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>
    ```
相關文章
相關標籤/搜索