MyBatis 懶加載 一級緩存 二級緩存(一)

目錄

背景

MyBatis 懶加載

MyBatis 一級緩存

MyBatis 二級緩存


背景

最近在讀《Spring+MYBatis企業應用實戰》(別問我爲什麼要看這麼舊的書,因爲我只是一個小垃圾),裏面講到了懶加載、一級緩存、二級緩存,以前也瞭解過概念,那時候還沒有開發經驗,只是照本宣科的記下來,現在有了實踐體會,一併記下來。

MyBatis 懶加載

懶加載也就是延遲加載。在一對多的映射關係中,我們可能不希望在進行主表數據查詢的時候,同步的查詢明細表。只有當訪問明細表屬性的時候,也就是我們需要使用明細表數據的時候,再進行明細表數據的查詢(SQL執行)。這也正是懶加載機制的使用場景。

開啓懶加載,只需要加一下全局配置就好。

        <!--延遲加載全局開關,當值爲true時,所有關聯對象都會延遲加載,默認爲false-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--屬性爲true時,會使所有延遲加載的屬性立即加載, 所以要配置爲false-->
        <setting name="aggressiveLazyLoading" value="false"/>

 

MyBatis 查詢緩存

我們一般的業務場景,都是讀的頻率高於寫的頻率的,所以數據庫的壓力一般都來自於查詢。MyBtis提供了一級緩存和二級緩存來緩解數據庫的查詢壓力。

MyBatis 一級緩存

一級緩存是sqlSession級別的,也就是說緩存數據的作用域是sqlSession範圍的,不同的sqlSession,緩存數據是隔離的。即同一sqlSession,執行一次SQL查詢,就會將數據緩存到內存中,之後若無DML操作(create、update、delete),再次進行相同查詢時,將會從內存中讀取數據,不會再次執行SQL。若執行了DML操作並提交到數據庫,則會清空緩存,避免出現讀取髒數據。一級緩存默認開啓,無需配置。

MyBatis 二級緩存

二級緩存是mapper級別的,通過mapper的namespace來區分。不同的mapper,緩存數據是隔離的;不同的sqlSession,二級緩存是共享的。即同一mapper,執行一次SQL查詢,就會將數據緩存到內存中,之後若無DML操作(create、update、delete),再次進行相同查詢時,將會從內存中讀取數據,不會再次執行SQL。若執行了DML操作並提交到數據庫,則會清空緩存,避免出現讀取髒數據。二級緩存默認關閉,需要配置如下。

config.xml

<!--開啓全局二級緩存-->
<setting name="cacheEnabled" value="true"/>

mapper.xml中開啓緩存

<cache/>

缺省狀態下,都採用默認配置。也可以修改爲自己指定的配置,配置項如下

配置項 說明
flushInterval 刷新間隔,默認不刷新
size 緩存數目,默認1024
readOnly 緩存對象是否只讀,默認爲false
eviction

回收策略,默認是LRU。有以下幾種策略:

LRU:最近最少使用

FIFO:先進先出

SOFT:軟引用,基於垃圾回收器狀態和軟引用規則的對象

WEAK:弱引用,更積極的移除基於垃圾回收器狀態及弱引用規則的對象

 

 

 

 

 

 

 

 

參考文檔

Mybatis延遲加載的實現以及使用場景

Mybatis的二級緩存配置

mybatis開啓二級緩存

《Spring+MYBatis企業應用實戰》讀書筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章