MyBatis關閉一級緩存的兩種方式(分註解和xml兩種方式)

問題:為什麼有緩存

mybatis默認開啟一級緩存

什麼場景下必須需要關閉一級緩存

場景:執行2次相同sql,但是第一次查詢sql結果會加工處理,比如解析銘文,或者反編譯加密解密用戶名/密碼字符串等等,如果不關閉一級緩存,等第二次再查詢相同sql時不會去數據庫表重新查詢,而是直接使用緩存,從而導致後面拿到的不是原始數據而處理出錯

關閉一級緩存方法(針對使用MyBatis場景)

第一種:xml形式(關閉所有一級緩存)

<settings>
<setting name="cacheEnabled" value="false"/>
</settings>

第二種:註解形式(可指定僅僅某個Mapper關閉註解)

@Options(flushCache = Options.FlushCachePolicy.TRUE)
@Select("select * from ge_jdbc_datasource where id = #{id,jdbcType=BIGINT} and status = 1")
@ResultMap("resultMap")
JdbcDataSource find(Long id);

第三種:sql動態拼接傳入的隨機數

比如sql傳參random()數值 或者 sql傳入當前時間毫秒數,切記一定要從方法形參傳過去而不要在sql中拼寫,否則無效

舉例說明:下面方式無效

select id from ge_jdbc_datasource where id = 1 and STATUS = 1 AND NOW()=NOW()

到此這篇關於MyBatis關閉一級緩存的兩種方式(分註解和xml兩種方式)的文章就介紹到這瞭,更多相關MyBatis關閉一級緩存內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: