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

Mybatis實(shí)現(xiàn)一對(duì)多映射處理

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

一、概述

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

例如,一個(gè)用戶可以有多個(gè)訂單,或者一個(gè)部門(mén)可以有多個(gè)員工。

在數(shù)據(jù)庫(kù)中,一對(duì)多關(guān)系通常通過(guò)外鍵來(lái)實(shí)現(xiàn)。

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

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

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

Dept.java

public class Dept {
    private Integer did;
    private String deptName;
    private List<Emp> emps;//用于表示數(shù)據(jù)庫(kù)一對(duì)多的關(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方法
}

三、問(wèn)題

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

四、解決方案

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

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

DeptMapper.java

 /**
     * @description:獲取部門(mén)以及部門(mén)中所有的員工信息
     * @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:處理一對(duì)多的映射關(guān)系
            ofType:表示該屬性所對(duì)應(yīng)的集合中存儲(chǔ)數(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:獲取部門(mén)以及部門(mén)中所有的員工信息
     * @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、方案二:分步查詢(嵌套查詢)

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

DeptMapper

 /**
     * @description:通過(guò)分步查詢查詢部門(mén)以及部門(mén)中所有的員工信息
     *              分步查詢第一步:查詢部門(mén)信息
     * @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:通過(guò)分步查詢查詢部門(mén)以及部門(mén)中所有的員工信息
     *              分步查詢第二步:根據(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:通過(guò)分步查詢查詢部門(mén)以及部門(mén)中所有的員工信息
     * @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());
    }

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

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

相關(guān)文章

  • java使用Nagao算法實(shí)現(xiàn)新詞發(fā)現(xiàn)、熱門(mén)詞的挖掘

    java使用Nagao算法實(shí)現(xiàn)新詞發(fā)現(xiàn)、熱門(mén)詞的挖掘

    這篇文章主要介紹了java使用Nagao算法實(shí)現(xiàn)新詞發(fā)現(xiàn)、熱門(mén)詞的挖掘的思路和詳細(xì)代碼,需要的朋友可以參考下
    2015-07-07
  • Spring中Bean注入源碼示例解析

    Spring中Bean注入源碼示例解析

    這篇文章主要為大家介紹了Spring中Bean注入源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Nacos配置中心搭建及動(dòng)態(tài)刷新配置及踩坑記錄

    Nacos配置中心搭建及動(dòng)態(tài)刷新配置及踩坑記錄

    這篇文章主要介紹了Nacos配置中心搭建及動(dòng)態(tài)刷新配置及踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 關(guān)于Kill指令停掉Java程序的問(wèn)題

    關(guān)于Kill指令停掉Java程序的問(wèn)題

    這篇文章主要介紹了Kill指令停掉Java程序的思考,主要探究kill指令和java的關(guān)閉鉤子的問(wèn)題,需要的朋友可以參考下
    2021-10-10
  • java實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)檔案管理系統(tǒng)

    java實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)檔案管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)檔案管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot快速構(gòu)建應(yīng)用程序方法介紹

    SpringBoot快速構(gòu)建應(yīng)用程序方法介紹

    這篇文章主要介紹了SpringBoot快速構(gòu)建應(yīng)用程序方法介紹,涉及SpringBoot默認(rèn)的錯(cuò)誤頁(yè)面,嵌入式Web容器層面的約定和定制等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Mybatis-Plus中update()和updateById()將字段更新為null

    Mybatis-Plus中update()和updateById()將字段更新為null

    本文主要介紹了Mybatis-Plus中update()和updateById()將字段更新為null,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Springboot整合多數(shù)據(jù)源代碼示例詳解

    Springboot整合多數(shù)據(jù)源代碼示例詳解

    這篇文章主要介紹了Springboot整合多數(shù)據(jù)源代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot整合Swagger頁(yè)面禁止訪問(wèn)swagger-ui.html方式

    SpringBoot整合Swagger頁(yè)面禁止訪問(wèn)swagger-ui.html方式

    本文介紹了如何在SpringBoot項(xiàng)目中通過(guò)配置SpringSecurity和創(chuàng)建攔截器來(lái)禁止訪問(wèn)SwaggerUI頁(yè)面,此外,還提供了禁用SwaggerUI和Swagger資源的配置方法,以確保這些端點(diǎn)和頁(yè)面對(duì)外部用戶不可見(jiàn)或無(wú)法訪問(wèn)
    2025-02-02
  • HashMap的底層實(shí)現(xiàn)原理分析

    HashMap的底層實(shí)現(xiàn)原理分析

    本文主要介紹了HashMap的底層實(shí)現(xiàn)結(jié)構(gòu),包括JDK1.7和1.8版本的區(qū)別,JDK1.7使用數(shù)組加鏈表實(shí)現(xiàn),而JDK1.8引入了紅黑樹(shù)優(yōu)化,文章詳細(xì)解釋了HashMap如何確定哈希桶數(shù)組索引位置、put方法的執(zhí)行過(guò)程以及擴(kuò)容原理
    2025-01-01

最新評(píng)論