MyBatis的flushCache和useCache的使用注意

以前在利用MyBatis作開發的時候,遇到了一個問題,使用select配置的時候發現先後兩次的結果是同樣的,而且使用statementType="CALLABLE"配置,而後在配置中寫PL/SQL代碼去更新數據庫的時候,發現只更新了第一次,第二次在對傳進來的參數沒有變化的狀況下,就不會在進入PL/SQL代碼中執行。後來發現,這是因爲MyBatis緩存的緣由。數據庫

在MyBatis中有flushCache、useCache這兩個配置屬性,分爲下面幾種狀況:緩存

(1)當爲select語句時:開發

flushCache默認爲false,表示任什麼時候候語句被調用,都不會去清空本地緩存和二級緩存。文檔

useCache默認爲true,表示會將本條語句的結果進行二級緩存。配置

(2)當爲insert、update、delete語句時:date

flushCache默認爲true,表示任什麼時候候語句被調用,都會致使本地緩存和二級緩存被清空。select

useCache屬性在該狀況下沒有。數據

上面的信息我是從MyBatis官方文檔中找到的,會發現當爲select語句的時候,若是沒有去配置flushCache、useCache,那麼默認是啓用緩存的,因此,若是有必要,那麼就須要人工修改配置,修改結果相似下面:項目

<select id="save" parameterType="XXXXXEO" statementType="CALLABLE" flushCache="true" useCache="false">
    ……
</select>

上面的statementType="CALLABLE"這個屬性是個人項目中須要用到的,若是用不到就不用管它,注意後面的flushCache="true"和useCache="false",作了如上設置之後,發現問題就解決了。let

相關文章
相關標籤/搜索