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!
推薦閱讀:
- Java面試題沖刺第九天–MyBatis2
- MyBatis在DAO層定義接口返回類型泛型無效的解決
- MyBatis別名和settings設置方式
- MyBatis全局配置文件詳解
- Mybatis sqlMapConfig.xml中的mappers標簽使用