最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis實現(xiàn)一對多映射處理

 更新時間:2023年08月03日 11:47:45   作者:_GGBond_  
MyBatis是一種流行的Java持久化框架,這篇文章主要為大家介紹了Mybatis如何實現(xiàn)一對多映射處理,文中的示例代碼講解詳細(xì),需要的可以參考下

一、概述

一對多關(guān)系表示一個實體對象(一)可以擁有多個關(guān)聯(lián)對象(多)。

例如,一個用戶可以有多個訂單,或者一個部門可以有多個員工。

在數(shù)據(jù)庫中,一對多關(guān)系通常通過外鍵來實現(xiàn)。

二、創(chuàng)建數(shù)據(jù)模型

定義實體類:定義主表實體類和從表實體類,主表實體類 中包含 從表實體類 的List集合屬性。

現(xiàn)在我們以此來創(chuàng)建面向?qū)ο笳Z言的對象數(shù)據(jù)模型:

Dept.java

public class Dept {
    private Integer did;
    private String deptName;
    private List<Emp> emps;//用于表示數(shù)據(jù)庫一對多的關(guān)系
    // 省略構(gòu)造函數(shù)和getter/setter方法
}

Emp.java

public class Emp {
    private Integer eid;
    private String empName;
    private Integer age;
    private String sex;
    private String email;
    // 省略構(gòu)造函數(shù)和getter/setter方法
}

三、問題

假設(shè)我們現(xiàn)在又兩張表,一張員工表,一張部門表,現(xiàn)在我們要獲取部門以及該部門中所有的員工信息

四、解決方案

1、方案一:collection(嵌套結(jié)果)

嵌套結(jié)果:使用嵌套結(jié)果的方式,可以在查詢主實體對象的同時,通過嵌套的方式將關(guān)聯(lián)實體對象的屬性嵌套到主實體對象的屬性中。這種方式的實現(xiàn)需要在Mapper.xml文件中定義一個SQL語句,使用嵌套的方式將關(guān)聯(lián)實體對象的屬性映射到主實體對象的屬性中。在定義映射關(guān)系時,需要使用resultMap標(biāo)簽來定義主實體對象和關(guān)聯(lián)實體對象的映射關(guān)系,使用collection標(biāo)簽來嵌套關(guān)聯(lián)實體對象的屬性。

DeptMapper.java

 /**
     * @description:獲取部門以及部門中所有的員工信息
     * @author: Hey
     * @date: 2022/7/4 10:46
     * @param: [did]
     * @return: com.ir.mybatis.pojo.Dept
     **/
    Dept getDeptAndEmp(@Param("did") Integer did);

DeptMapper.xml

<resultMap id="deptAndEmpResultMap" type="Dept">
        <id property="did" column="did"></id>
        <result property="deptName" column="dept_name"></result>
        <!--
            collection:處理一對多的映射關(guān)系
            ofType:表示該屬性所對應(yīng)的集合中存儲數(shù)據(jù)的類型
        -->
        <collection property="emps" ofType="Emp">
            <id property="eid" column="eid"></id>
            <result property="empName" column="emp_name"></result>
            <result property="age" column="age"></result>
            <result property="sex" column="sex"></result>
            <result property="email" column="email"></result>
        </collection>
    </resultMap>
    <!--Dept getDeptAndEmp(@Param("did") Integer did);-->
    <select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">
        select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did = #{did}
    </select>

ResultTest.java

 /**
     * @description:獲取部門以及部門中所有的員工信息
     * @author: Hey
     * @date: 2022/7/4 10:54
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetDeptAndEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = mapper.getDeptAndEmp(1);
        System.out.println(dept);
        /**
         * Dept{
         * did=1, deptName='A',
         * emps=[
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'},
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * ]
         * }
         */
    }

2、方案二:分步查詢(嵌套查詢)

嵌套查詢:使用嵌套查詢的方式,可以在查詢主實體對象的同時,通過查詢關(guān)聯(lián)實體對象的方式獲取相關(guān)聯(lián)的多個實體對象。這種方式的實現(xiàn)需要在Mapper.xml文件中定義兩個獨立的SQL語句,一個用于查詢主實體對象,另一個用于查詢關(guān)聯(lián)實體對象。在查詢主實體對象時,通過使用select標(biāo)簽的子標(biāo)簽來執(zhí)行關(guān)聯(lián)實體對象的查詢,并將查詢結(jié)果映射到主實體對象的屬性中。

DeptMapper

 /**
     * @description:通過分步查詢查詢部門以及部門中所有的員工信息
     *              分步查詢第一步:查詢部門信息
     * @author: Hey
     * @date: 2022/7/4 12:31
     * @param: [did]
     * @return: com.ir.mybatis.pojo.Dept
     **/
    Dept getDeptAndEmpByStepOne(@Param("did") Integer did);

DeptMapper.xml

 <resultMap id="deptAndEmpByStepResultMap" type="Dept">
        <id property="did" column="did"></id>
        <result property="deptName" column="dept_name"></result>
        <collection property="emps"
                    select="com.ir.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo"
                    column="did" fetchType="eager">
        </collection>
    </resultMap>
    <select id="getDeptAndEmpByStepOne" resultType="deptAndEmpByStepResultMap">
        select * from t_dept where did = #{did}
    </select>

EmpMapper

/**
     * @description:通過分步查詢查詢部門以及部門中所有的員工信息
     *              分步查詢第二步:根據(jù)did查詢員工信息
     * @author: Hey
     * @date: 2022/7/4 12:36
     * @param: [did]
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);

EmpMapper.xml

<select id="getDeptAndEmpByStepTwo"  resultType="Emp">
      select * from t_emp where did = #{did}
    </select>

ResultTest

/**
     * @description:通過分步查詢查詢部門以及部門中所有的員工信息
     * @author: Hey
     * @date: 2022/7/4 12:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetDeptAndEmpByStep(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = mapper.getDeptAndEmpByStepOne(1);
        System.out.println(dept.getDeptName());
    }

無論是使用嵌套查詢還是嵌套結(jié)果的方式,都需要在Mapper.xml文件中定義相應(yīng)的SQL語句和映射關(guān)系。同時,為了提高查詢性能,可以使用Mybatis的延遲加載機(jī)制來減少查詢次數(shù),提高數(shù)據(jù)訪問效率。

到此這篇關(guān)于Mybatis實現(xiàn)一對多映射處理的文章就介紹到這了,更多相關(guān)Mybatis映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中BigDecimal的equals方法和compareTo方法的區(qū)別詳析

    Java中BigDecimal的equals方法和compareTo方法的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Java中BigDecimal的equals方法和compareTo方法區(qū)別的相關(guān)資料,對于BigDecimal的大小比較,用equals方法的話會不僅會比較值的大小,還會比較兩個對象的精確度,而compareTo方法則不會比較精確度,只比較數(shù)值的大小,需要的朋友可以參考下
    2023-11-11
  • 建議你使用LocalDateTime而不是Date哦

    建議你使用LocalDateTime而不是Date哦

    這篇文章主要介紹了建議你使用LocalDateTime而不是Date,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 世界著名程序SpringMVC完整過程

    世界著名程序SpringMVC完整過程

    這篇文章主要為大家介紹了世界著名程序SpringMVC實現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 對Netty組件的基本介紹

    對Netty組件的基本介紹

    這篇文章主要介紹了對Netty組件的基本介紹,Netty是基于Java NIO client-server的網(wǎng)絡(luò)應(yīng)用框架,使用Netty可以快速開發(fā)網(wǎng)絡(luò)應(yīng)用,本文涵蓋了netty開發(fā)中主要的組件的介紹,需要的朋友可以參考下
    2021-06-06
  • 使用Java開發(fā)實現(xiàn)OAuth安全認(rèn)證的應(yīng)用

    使用Java開發(fā)實現(xiàn)OAuth安全認(rèn)證的應(yīng)用

    這篇文章主要介紹了使用Java開發(fā)實現(xiàn)OAuth安全認(rèn)證的應(yīng)用的方法,OAuth安全認(rèn)證經(jīng)常出現(xiàn)于社交網(wǎng)絡(luò)API應(yīng)用的相關(guān)開發(fā)中,需要的朋友可以參考下
    2015-11-11
  • springMVC的RequestMapping請求不到路徑的解決

    springMVC的RequestMapping請求不到路徑的解決

    這篇文章主要介紹了springMVC的RequestMapping請求不到路徑的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java中BigDecimal用法詳解

    java中BigDecimal用法詳解

    本文詳細(xì)講解了java中BigDecimal的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 基于JAVA中使用Axis發(fā)布/調(diào)用Webservice的方法詳解

    基于JAVA中使用Axis發(fā)布/調(diào)用Webservice的方法詳解

    如果初識axis發(fā)布/調(diào)用WS,建議先讀上面的參考文件,本文對于發(fā)布/調(diào)用WS的主要步驟只是簡單文字描述,沒有它寫的詳盡
    2013-05-05
  • Java排序算法之堆排思想及代碼實現(xiàn)

    Java排序算法之堆排思想及代碼實現(xiàn)

    今天小編就為大家分享一篇關(guān)于Java排序算法之堆排思想及代碼實現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • JavaMail發(fā)送(帶圖片和附件)和接收郵件實現(xiàn)詳解(四)

    JavaMail發(fā)送(帶圖片和附件)和接收郵件實現(xiàn)詳解(四)

    這篇文章主要為大家詳細(xì)介紹了JavaMail帶圖片和附件的發(fā)送和接收郵件實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論

凯里市| 龙泉市| 遂川县| 苍南县| 平顶山市| 平遥县| 吴堡县| 东方市| 宁陵县| 弥渡县| 阜新市| 秦安县| 宣城市| 河曲县| 长海县| 和顺县| 娱乐| 洞口县| 泊头市| 剑阁县| 手游| 洛扎县| 郁南县| 民乐县| 镇赉县| 长春市| 晋中市| 红桥区| 遂溪县| 扎赉特旗| 广西| 东阿县| 内乡县| 陇川县| 北碚区| 永福县| 南乐县| 九寨沟县| 从江县| 砚山县| 广宁县|