1. 程式人生 > 程式設計 >Mybatis延遲載入的實現方式

Mybatis延遲載入的實現方式

1、概念:

MyBatis中的延遲載入,也稱為懶載入,是指在進行表的關聯查詢時,按照設定延遲規則推遲對關聯物件的select查詢。例如在進行一對多查詢的時候,只查詢出一方,當程式中需要多方的資料時,mybatis再發出sql語句進行查詢,這樣子延遲載入就可以的減少資料庫壓力。MyBatis 的延遲載入只是對關聯物件的查詢有遲延設定,對於主載入物件都是直接執行查詢語句的。

2、載入時機:

直接載入:執行完對主載入物件的 select 語句,馬上執行對關聯物件的 select 查詢。侵入式延遲: 執行對主載入物件的查詢時,不會執行對關聯物件的查詢。但當要訪問主載入物件的詳情屬性時,就會馬上執行關聯物件的select查詢。深度延遲: 執行對主載入物件的查詢時,不會執行對關聯物件的查詢。訪問主載入物件的詳情時也不會執行關聯物件的select查詢。只有當真正訪問關聯物件的詳情時,才會執行對關聯物件的 select 查詢。

注意:延遲載入的應用要求:關聯物件的查詢與主載入物件的查詢必須是分別進行的select語句,不能是使用多表連線所進行的select查詢。因為,多表連線查詢,實質是對一張表的查詢,對由多個表連線後形成的一張表的查詢。會一次性將多張表的所有資訊查詢出來。

3、侵入式延遲載入:

①、Mybatis-config.xml大配置檔案,首先開啟延遲載入,然後再配置侵入式載入

<!--開啟延遲載入-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--配置侵入式延遲載入   預設為false(深度載入)
      侵入式:預設只會執行主載入SQL,那麼當訪問主載入物件的詳細資訊時才會執行關聯物件的SQL查詢
      深度延遲:預設只執行主載入SQL,那麼當呼叫到主載入物件中關聯物件的資訊時才會執行關聯物件的SQL查詢
    -->
    <setting name="aggressiveLazyLoading" value="true"/>

②、不呼叫主載入物件時只有一條SQL

③、呼叫主載入物件的資訊時會產生兩條SQL

4、深入式延遲載入:

①、Mybatis-config.xml大配置檔案,首先開啟延遲載入,然後再配置深度載入

<!--開啟延遲載入-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--配置侵入式延遲載入   預設為false(深度載入)
      侵入式:預設只會執行主載入SQL,那麼當訪問主載入物件的詳細資訊時才會執行關聯物件的SQL查詢
      深度延遲:預設只執行主載入SQL,那麼當呼叫到主載入物件中關聯物件的資訊時才會執行關聯物件的SQL查詢
    -->
    <setting name="aggressiveLazyLoading" value="false"/>

②、呼叫主載入物件時不會執行第二條載入SQL

③、呼叫關聯物件詳細資訊時會執行第二次查詢

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。