網頁

2019/2/22

MyBatis 如何關閉一級快取 How to close first level cache (local cache)

MyBatis執行SQL時預設使用第一級快取(first level cache),也就是local cache來減少直接從資料庫取得資料。但local cache的作用範圍僅限於SqlSession本身,在不同的SqlSession之間並不共享,可能會造成不同SqlSession間資料不一致的問題。


MyBatis的local cache預設是開啟的,且無法真正關閉,只能將作用範圍由預設的SESSION(每次交易結束後清空local cache)改為STATEMENT(每次SQL執行結束就清空local cache)。

可以在MyBatis設定檔的<settings>中將localCacheScope的值改為STATEMENT即可。

<settings>
  ...
  <setting name="localCacheScope" value="STATEMENT"/>
  ...
</settings>

如果是Spring Boot加MyBatis,可直接在application.properties中設定

mybatis.configuration.local-cache-scope=statement

文章對有解決你的問題的話還請幫忙點個Google廣告支持。


引述官網說明如下:

Setting Description Valid Values Default
localCacheScope MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession. SESSION | STATEMENT SESSION


沒有留言:

張貼留言