MyBatis 延遲載入的三種載入方式深入,你get了嗎?
阿新 • • 發佈:2018-11-10
延遲載入
延遲載入對主物件都是直接載入,只有對關聯物件是延遲載入。
延遲載入可以減輕資料庫的壓力,
延遲載入不可是一條SQL查詢多表資訊,這樣構不成延遲載入,會形成直接載入。
延遲載入分為三種類型:
1.直接載入
執行完主物件之後,直接執行關聯物件。
2.侵入式載入
在執行主物件詳情的時候,執行關聯物件。
3.深度延遲載入
執行完主物件或主物件詳情不會執行關聯物件,只有用到關聯物件資料的時候才走深度延遲載入。
延遲載入預設情況下是關閉狀態(false) 延遲載入下的侵入式載入預設情況下是開啟狀態(true) 在這種情況下延遲載入不生效, 比如說延遲載入是一個大的水龍頭總閘,如果總閘沒開,那麼總閘裡面的小的閘肯定沒有水。如果想要使用延遲載入必須寫成true
現在知道延遲載入的狀態,那他是在哪裡設定開啟關閉狀態的呢? 答案是在大配置檔案中設定延遲載入的狀態
看一下幾個例子
1.預設情況的延遲載入 (這是在MyBatis3.4.1版本之前的預設情況) :(aggressiveLazyLoading)侵入式延遲載入為true, 在3.4.1之後的版本(aggressiveLazyLoading)侵入式延遲載入預設值為false
2.侵入式延遲載入
現在看一下訪問主屬性的侵入式延遲載入的狀態如何
3.深度延遲載入
深度延遲載入 大配置中的設定
只訪問主物件的屬性,深度延遲載入的狀態為:
現在我們看一下訪問關聯物件的屬性,深度延遲載入的狀態為:
在大配置檔案設定延遲載入是使用的是setting節點,與其他節點位置順序不要亂。
大配置中的延遲載入程式碼:
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/> <!--現在的狀態為深度延遲載入-->
</settings>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/> <!--現在的狀態為侵入式延遲載入-->
</settings>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="false"/> <!--現在的狀態為直接載入-->(3.4.1版本之後的直接載入設定)
</settings>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="true"/> <!--現在的狀態為直接載入-->(3.4.1版本之前的直接載入設定)
</settings>