1. 程式人生 > >MyBatis 延遲載入的三種載入方式深入,你get了嗎?

MyBatis 延遲載入的三種載入方式深入,你get了嗎?

延遲載入

  延遲載入對主物件都是直接載入,只有對關聯物件是延遲載入。

  延遲載入可以減輕資料庫的壓力,

  延遲載入不可是一條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>