1. 程式人生 > >mybatis select語句快取使用注意事項

mybatis select語句快取使用注意事項

工作中遇到一個select語句快取問題(可提交讀隔離級別下select語句沒有讀取到其它事物更新後的結果),場景如下: 資料庫:mysql User表結構: 2013年06月29日 - 網易杭研後臺技術中心 - 網易杭研後臺技術中心的部落格   隔離級別:read committed(可提交讀) Mapper檔案: 2013年06月29日 - 網易杭研後臺技術中心 - 網易杭研後臺技術中心的部落格  程式碼如下: 2013年06月29日 - 網易杭研後臺技術中心 - 網易杭研後臺技術中心的部落格 2013年06月29日 - 網易杭研後臺技術中心 - 網易杭研後臺技術中心的部落格   執行結果: 2013年06月29日 - 網易杭研後臺技術中心 - 網易杭研後臺技術中心的部落格   問題:雖然我們把mysql隔離級別設定為read committed,但是第二次查詢的結果並沒有看到其它事物提交的更新結果。 問題分析:檢視日誌發現第一次的查詢sql打印出來了,但是第二次查詢並沒有列印sql;猜測可能是由於第二次查詢直接使用上一次查詢的快取導致的問題。檢視mybatis使用者手冊,看到select語句中有關於快取的配置:flushCache配置(預設為false)、useCache(預設為true),也就是說select語句預設快取是開啟的,對於我們這個場景應該把這個快取給禁掉。 問題解決:同一個session的select語句上設定flushCache="true" mybatis手冊中一下兩個配置的解釋: flushCache 將其設定為true,無論語句什麼時候被呼叫,都會導致快取被清空。預設值:false。 useCache 將其設定為true,將會導致本條語句的結果被快取。預設值:true。 測試發現,如果設定useCache="false"沒有設定flushCache,select的結果還是被快取了;把flushCache設定為true就沒有使用快取結果了。不知道這是不是mybatis的一個bug。