欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis中的延遲加載類型及設(shè)定詳解

 更新時間:2023年10月27日 10:30:08   作者:guo123shuang  
這篇文章主要介紹了mybatis中的延遲加載類型及設(shè)定詳解,MyBatis中的延遲加載,也稱為懶加載,是指在進(jìn)行關(guān)聯(lián)查詢時,按照設(shè)置延遲規(guī)則推遲對關(guān)聯(lián)對象的select查詢,延遲加載可以有效的減少數(shù)據(jù)庫壓力,需要的朋友可以參考下

概念

MyBatis中的延遲加載,也稱為懶加載,是指在進(jìn)行關(guān)聯(lián)查詢時,按照設(shè)置延遲規(guī)則推遲對關(guān)聯(lián)對象的select查詢。延遲加載可以有效的減少數(shù)據(jù)庫壓力。

延時加載類型及設(shè)定

通過對全局參數(shù):lazyLoadingEnabled進(jìn)行設(shè)置,默認(rèn)就是false。 進(jìn)行設(shè)置修改延時加載狀態(tài)

直接加載: 執(zhí)行完對主加載對象的select語句,馬上執(zhí)行對關(guān)聯(lián)對象的select查詢。

<settings>
    <!-- 延遲加載總開關(guān) -->
    <setting name="lazyLoadingEnabled" value="false"/>
</settings>

侵入式延遲:執(zhí)行對主加載對象的查詢時,不會執(zhí)行對關(guān)聯(lián)對象的查詢。但當(dāng)要訪問主加載對象的

某個屬性(該屬性不是關(guān)聯(lián)對象的屬性)時,就會馬上執(zhí)行關(guān)聯(lián)對象的select查詢。

<settings>
    <!-- 延遲加載總開關(guān) -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!-- 侵入式延遲加載開關(guān) -->
    <setting name="aggressiveLazyLoading" value="true"/>
</settings>

**深度延遲:**執(zhí)行對主加載對象的查詢時,不會執(zhí)行對關(guān)聯(lián)對象的查詢。訪問主加載對象的詳情時也不會執(zhí)行關(guān)聯(lián)對象的select查詢。只有當(dāng)真正訪問關(guān)聯(lián)對象的詳情時,才會執(zhí)行對關(guān)聯(lián)對象的select查詢。

<settings>
    <!-- 延遲加載總開關(guān) -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!-- 侵入式延遲加載開關(guān) -->
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>

優(yōu)缺點

  • 深度延遲加載的使用會提升性能。
  • 如果延遲加載的表數(shù)據(jù)太多,此時會產(chǎn)生N+1問題,主信息加載一次算1次,而從信息是會根據(jù)主信息傳遞過來的條件,去查詢從表多次。

延時加載實例

需要校驗的是 深度延遲的時候直接調(diào)用bankCardList是否有問題

? 首先我們先思考一個問題,假設(shè):在一對多中,我們有一個用戶,他有10張銀行卡。

問題1:在查詢用戶的時候,要不要把關(guān)聯(lián)的銀行卡查出來?

問題2:在查詢銀行卡的時候,要不要把關(guān)聯(lián)的用戶查出來?

用戶類及銀行卡類

public class User implements Serializable{
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    private List<BankCard> cardList;

    get和set方法省略.....      
}


public class BankCard implements Serializable{
    private Integer id;
    private Integer uid;
    private String cardNo;

    get和set方法省略.....      
}

dao層接口

/**
     * 查詢所有的用戶
     *
     * @return
     */
    List<User> findAll();


xml配置

<resultMap id="userAccountMap" type="com.example.domain.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="birthday" column="birthday"/>
    <result property="sex" column="sex"/>
    <result property="address" column="address"/>
    <collection property="bankCardList" ofType="com.example.domain.BankCard" column="id"
                select="com.example.dao.BankCardDao.findAllByUid"/>
</resultMap>
<select id="findAll" resultMap="userAccountMap">
    SELECT * FROM USER;
</select>

**注意:**主要的功能實現(xiàn)位于中,對于銀行卡列表的信息通過collection集合來映射,通過select指定集合中的每個元素如何查詢,在本例中select的屬性值為BankCardDao.xml文件的namespace com.example.dao.AccountDao路徑以及指定該映射文件下的findAllByUid方法,通過這個唯一標(biāo)識指定集合中元素的查找方式。因為在這里需要用到根據(jù)用戶ID查找賬戶,所以需要同時配置一下findAllByUid方法的實現(xiàn)。

BankCardDao的實現(xiàn)

 /**
     * 根據(jù)用戶ID查詢賬戶信息
     * @return
     */
    List<BankCard> findAllByUid(Integer uid);

BankCardDao.xml

 
<select id="findAllByUid" resultType="com.example.domain.BankCard">
        SELECT * FROM bank_card WHERE uid = #{uid};
 </select>

mybatis開啟全局延遲加載配置

configuration>
    <settings>
        <!--開啟全局的懶加載-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--關(guān)閉立即加載,其實不用配置,默認(rèn)為false-->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!--開啟Mybatis的sql執(zhí)行相關(guān)信息打印-->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>


    <typeAliases>
        <typeAlias type="com.example.domain.Account" alias="account"/>
        <typeAlias type="com.example.domain.User" alias="user"/>
        <package name="com.example.domain"/>
    </typeAliases>


    <environments default="test">
        <environment id="test">
            <!--配置事務(wù)-->
            <transactionManager type="jdbc"></transactionManager>
            <!--配置連接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test1"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置映射文件的路徑-->
    <mappers>
        <mapper resource="com/example/dao/UserDao.xml"/>
        <mapper resource="com/example/dao/AccountDao.xml"/>
    </mappers>
</configuration>

到此這篇關(guān)于mybatis中的延遲加載類型及設(shè)定詳解的文章就介紹到這了,更多相關(guān)mybatis中的延遲加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)字符串倒序輸出的四種方法匯總

    Java實現(xiàn)字符串倒序輸出的四種方法匯總

    這篇文章主要介紹了Java實現(xiàn)字符串倒序輸出的四種方法匯總,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MyBatis實現(xiàn)兩種查詢樹形數(shù)據(jù)的方法詳解(嵌套結(jié)果集和遞歸查詢)

    MyBatis實現(xiàn)兩種查詢樹形數(shù)據(jù)的方法詳解(嵌套結(jié)果集和遞歸查詢)

    樹形結(jié)構(gòu)數(shù)據(jù)在開發(fā)中十分常見,比如:菜單數(shù)、組織樹, 利用 MyBatis 提供嵌套查詢功能可以很方便地實現(xiàn)這個功能需求。本文主要介紹了兩種方法,感興趣的可以了解一下
    2021-09-09
  • Java的@Repeatable注解使用詳細(xì)解析

    Java的@Repeatable注解使用詳細(xì)解析

    這篇文章主要介紹了Java的@Repeatable注解使用詳細(xì)解析,java8新增了注解@Repeatable,在hibernate-validator的源碼注解如@MAX、@NotNull等中,有@Repeatable注解的使用,需要的朋友可以參考下
    2024-02-02
  • Java Spring @Lazy延遲注入源碼案例詳解

    Java Spring @Lazy延遲注入源碼案例詳解

    這篇文章主要介紹了Java Spring @Lazy延遲注入源碼案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java利用endorsed如何覆蓋jdk提供的類詳解

    Java利用endorsed如何覆蓋jdk提供的類詳解

    這篇文章主要給大家介紹了關(guān)于Java利用endorsed如何覆蓋jdk提供的類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 使用Swagger2實現(xiàn)自動生成RESTful?API文檔

    使用Swagger2實現(xiàn)自動生成RESTful?API文檔

    在開發(fā)?RESTful?API?的過程中,文檔是非常重要的一部分,可以幫助開發(fā)者了解?API?的功能和使用方法,本文將使用Swagger2?實現(xiàn)自動生成?RESTful?API?文檔,需要的可以參考一下
    2023-06-06
  • Java獲取視頻時長、大小的示例

    Java獲取視頻時長、大小的示例

    這篇文章主要介紹了Java獲取視頻時長、大小的示例,幫助大家利用Java處理視頻,完成需求,感興趣的朋友可以了解下
    2020-11-11
  • elasticsearch聚合查詢實踐示例

    elasticsearch聚合查詢實踐示例

    這篇文章主要為大家介紹了elasticsearch聚合查詢實踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 使用Java和ffmpeg把音頻和視頻合成視頻的操作方法

    使用Java和ffmpeg把音頻和視頻合成視頻的操作方法

    這篇文章主要介紹了使用Java和ffmpeg把音頻和視頻合成視頻,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • JAVA實現(xiàn)異步調(diào)用實例代碼

    JAVA實現(xiàn)異步調(diào)用實例代碼

    在java平臺,實現(xiàn)異步調(diào)用的角色主要三種角色:調(diào)用者、取貨憑證、真實數(shù)據(jù)。本篇文章給大家介紹java實現(xiàn)異步調(diào)用實例代碼,需要的朋友可以參考下
    2015-09-09

最新評論