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 |
沒有留言:
張貼留言