亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis中的延遲加載,以及原理分析

 更新時間:2024年04月17日 11:20:38   作者:程序員JavaWind  
這篇文章主要介紹了Mybatis中的延遲加載以及原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Mybatis延遲加載原理

Mybatis 僅支持 association 關聯(lián)對象和 collection 關聯(lián)集合對象的延遲加載,association 指的就是一對一,collection 指的就是一對多查詢。

在 Mybatis配置文件中,可以配置是否啟用延遲加載 lazyLoadingEnabled=true|false。

它的原理是:使用 CGLIB 創(chuàng)建目標對象的代理對象,當調(diào)用目標方法時,進入攔截器方法,比如調(diào)用 a.getB().getName(),攔截器 invoke()方法發(fā)現(xiàn) a.getB()是null 值,那么就會單獨發(fā)送事先保存好的查詢關聯(lián) B 對象的 sql,把 B 查詢上來,然后調(diào)用 a.setB(b),于是 a 的對象 b 屬性就有值了,接著完成 a.getB().getName()方法的調(diào)用。這就是延遲加載的基本原理。

當然了,不光是 Mybatis,幾乎所有的包括 Hibernate,支持延遲加載的原理都是一樣的。

MyBatis延遲加載(以及可能會碰到的一些問題)

剛好學了延遲加載就來做個記錄

延遲加載(懶加載) 首先需要配置Mybaits-config文件 

<!-- 延遲加載設置-->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>

1.單端關聯(lián)查詢t添加select  需要在RoleDao中添加findRoleById方法,可無參數(shù)

Role findRoleById(int roleId); //RoleDao中添加
<!--    延遲加載(懶加載)-->
<resultMap id="lazyMap" type="com.demo.entity.User">
    <id column="id" property="id"/>
    <result column="username" property="username"/>
    <result column="password" property="password"/>
    <association property="role" column="role_id" select="com.demo.dao.RoleDao.findRoleById"> 需要在RoleDao里面添加findRoleById方法
    </association>
</resultMap>

<select id="findList" resultMap="lazyMap" >
    select id,
           username,
           password,
           role_id 對應association.column 
    from tb_users
</select>

對應的resultMap配置

<resultMap id="roleMap2" type="com.demo.entity.Role">
    <id column="id" property="id"/>
    <result column="role_name" property="roleName"/>
    <result column="role_state" property="roleState"/>
</resultMap>

<select id="findRoleById" resultMap="roleMap2">
    select id, role_name, role_state
    from tb_role
    where id = #{role_id}
</select>

測試 正常 輸出關聯(lián)對象會出現(xiàn)多條SQL

List<User> list = mapper.findList();
for (User user : list) {
    System.out.println(user.getId() + ", " + user.getUsername() + ", " + user.getPassword() );
    System.out.println(user.getRole().getId() + ", "+ user.getRole().getRoleName());
}

心得

使用MyBatis3.4.6版本會出現(xiàn) lazy proxy.這是MyBatis版本問題,之后我把他換成3.5.1之后可以正常運行。

如:出現(xiàn)一些其他異常對應的column值寫錯了,要一一對應 初學者設置column和property最好使用復制粘貼的方式以免出現(xiàn)其他錯誤

優(yōu)點:使用延遲加載能夠在不需要關聯(lián)數(shù)據(jù)的時候,僅執(zhí)行一條sql 提高執(zhí)行速度(我的理解,如有不對請多指點)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java基礎詳解之數(shù)據(jù)類型知識點總結(jié)

    java基礎詳解之數(shù)據(jù)類型知識點總結(jié)

    這篇文章主要介紹了java基礎詳解之數(shù)據(jù)類型知識點總結(jié),文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-04-04
  • SpringBoot啟動后啟動內(nèi)嵌瀏覽器的方法

    SpringBoot啟動后啟動內(nèi)嵌瀏覽器的方法

    這篇文章主要介紹了SpringBoot啟動后啟動內(nèi)嵌瀏覽器的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Docker使用Dockerfile自定義鏡像方式

    Docker使用Dockerfile自定義鏡像方式

    這篇文章主要介紹了Docker使用Dockerfile自定義鏡像方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringCloud zuul 網(wǎng)關如何解決跨域問題

    SpringCloud zuul 網(wǎng)關如何解決跨域問題

    這篇文章主要介紹了SpringCloud zuul網(wǎng)關解決跨域問題的具體實現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java Swing編寫一個簡單的計算器軟件

    Java Swing編寫一個簡單的計算器軟件

    大家好,本篇文章主要講的是Java Swing編寫一個簡單的計算器軟件,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 教你怎么用SpringBoot整合Swagger作為API

    教你怎么用SpringBoot整合Swagger作為API

    這篇文章主要介紹了教你怎么用SpringBoot整合Swagger作為API,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 淺談Java解釋器模式

    淺談Java解釋器模式

    這篇文章主要介紹了Java基于解釋器模式實現(xiàn)定義一種簡單的語言功能,簡單描述了解釋器模式的概念、功能及Java使用解釋器模式定義一種簡單語言的相關實現(xiàn)與使用技巧,需要的朋友可以參考下
    2021-10-10
  • Spring事件監(jiān)聽機制使用和原理解析

    Spring事件監(jiān)聽機制使用和原理解析

    Spring的監(jiān)聽機制基于觀察者模式,就是就是我們所說的發(fā)布訂閱模式,這種模式可以在一定程度上實現(xiàn)代碼的解耦,本文將從原理上解析Spring事件監(jiān)聽機制,需要的朋友可以參考下
    2023-06-06
  • Spring的@Conditional詳解

    Spring的@Conditional詳解

    這篇文章主要介紹了Spring的@Conditional詳解,給想要注入Bean增加限制條件,只有滿足限制條件才會被構(gòu)造并注入到Spring的IOC容器中,通常和@Bean注解一起使用,需要的朋友可以參考下
    2024-01-01
  • 計算機二級考試java軟件操作教程 教大家如何學習java

    計算機二級考試java軟件操作教程 教大家如何學習java

    如何成為一名知識豐富的Java程序員,順利通過計算機二級Java考試,這篇文章主要主要教大家如何學習java,java的學習路線是什么,從何學起,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論