" />

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

MyBatis中的collection兩種使用方法及效率比較

 更新時(shí)間:2022年06月13日 11:37:12   作者:Rabbityyhh  
collection主要是應(yīng)對(duì)表關(guān)系是一對(duì)多的情況,本文主要介紹了MyBatis中的collection兩種使用方法及效率比較,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

collection主要是應(yīng)對(duì)表關(guān)系是一對(duì)多的情況

查詢的時(shí)候,用到聯(lián)表去查詢

接下來(lái)的小案例包括:市,學(xué)校,醫(yī)院(隨便寫(xiě)的),寫(xiě)一個(gè)最簡(jiǎn)單的demo

主要的功能就是查詢出所有的市以及對(duì)應(yīng)的市下面所有的學(xué)校和醫(yī)院

實(shí)體類:醫(yī)院

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hospital {
    private int id;                 //醫(yī)院編號(hào)
    private int urbanId;            //市的編號(hào)
    private String hospitalName;    //醫(yī)院名稱
    private Long people;            //醫(yī)院人數(shù)
}

實(shí)體類:學(xué)校

@Data
@AllArgsConstructor
@NoArgsConstructor
public class School {
    private int id;               //學(xué)校編號(hào)
    private int urbanId;          //市的編號(hào)
    private String schoolName;    //學(xué)校名字
    private Long people;          //學(xué)校人數(shù)
}

實(shí)體類:市

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Urban {
    private int id;                   //市的編號(hào)
    private String cityId;            //省的編號(hào)(此博文沒(méi)用到)
    private String urbanName;         //城市名字
    private List<School> schools;     //對(duì)應(yīng)的所有的學(xué)校
    private List<Hospital> hospitals; //對(duì)應(yīng)的所有的醫(yī)院
}

第一種方式,采用select

首先我們要在學(xué)校和醫(yī)院接口對(duì)應(yīng)的xml中寫(xiě)出按照市的編號(hào)來(lái)查詢出所有數(shù)據(jù)的xml

xml:醫(yī)院

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yh.mybatis.dao.mapper.HospitalMapper">
    <select id="findAllByUId" resultType="com.yh.mybatis.dao.pojo.Hospital">
        select * from hospital where urban_id = #{urbanId}
    </select>
<!--實(shí)際工作不建議用 *,id就是mapper接口中對(duì)應(yīng)的方法名,resultType就是查詢出結(jié)果后返回的list的泛型 
 urban_id = #{urbanId} 按照urban_id去查找-->
</mapper>

xml:學(xué)校

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yh.mybatis.dao.mapper.SchoolMapper">
    <select id="urbanSchool" resultType="com.yh.mybatis.dao.pojo.School">
        select * from school where urban_id = #{urbanId}
    </select>
</mapper>

接下來(lái)就是在市的xml中對(duì)學(xué)校和醫(yī)院的xml進(jìn)行一個(gè)調(diào)用(用collection中select)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yh.mybatis.dao.mapper.UrbanMapper">
      <resultMap id="findAllUrbanSandH" type="com.yh.mybatis.dao.pojo.Urban">
        <collection property="schools" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.School"
                    select="com.yh.mybatis.dao.mapper.SchoolMapper.urbanSchool"
                    column="{urbanId=id}">
        </collection>
        <collection property="hospitals" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.Hospital"
                    select="com.yh.mybatis.dao.mapper.HospitalMapper.findAllByUId"
                    column="{urbanId=id}">
        </collection>
    </resultMap>
<!--
        resultMap中的 <id><result>都可以不寫(xiě),直接寫(xiě)List<School>和List<Hospital>
                                    type還是sql的返回類型
        collection中  property 是Urban中對(duì)應(yīng)的字段
                                    javaType 是這個(gè)字段的類型
                                    ofType 是這個(gè)字段的泛型  這一項(xiàng)和上一項(xiàng)其實(shí)都可以不寫(xiě),寫(xiě)上了看著更清晰
                                    select 是子表的按照市的編號(hào)查詢所有數(shù)據(jù)的方法 這里要寫(xiě)下全路徑
                                    column 作為select語(yǔ)句的參數(shù)傳入, 也就是把市的編號(hào)id 傳給醫(yī)院和學(xué)校xml的urbanId
-->
        <select id="findAllUrbanSandH" resultMap="findAllUrbanSandH">
        select * from urban
    </select>
</mapper>

第二種方式,執(zhí)行一次sql

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yh.mybatis.dao.mapper.UrbanMapper">
        <resultMap id="findAllUrbanSandH2" type="com.yh.mybatis.dao.pojo.Urban">
        <id property="id" column="id"/>
        <result property="cityId" column="city_id"/>
        <result property="urbanName" column="urban_name"/>
<!--這上面這幾個(gè)字段就是urban表中,自帶的那幾個(gè)字段-->
        <collection property="schools" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.School">
            <id property="id" column="sid"/>
            <result property="urbanId" column="surban_id"/>
            <result property="schoolName" column="school_name"/>
            <result property="people" column="speople"/>
        </collection>
<!--這上面就是school表中的字段
        javaType是urban類中定義的school的類型  可以不寫(xiě)
        ofType就是泛型,這個(gè)還是很有必要的,接下來(lái)的id result 就是這個(gè)類中定義的各種字段,要寫(xiě)全
        如果涉及到的任何表中,在數(shù)據(jù)庫(kù)中有重復(fù)的字段名,那就必須要起別名。(例如各個(gè)表中的id)
        起別名直接在下面的sql中就可以。
-->
        <collection property="hospitals" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.Hospital">
            <id property="id" column="hid"/>
            <result property="urbanId" column="hurban_id"/>
            <result property="hospitalName" column="hospital_name"/>
            <result property="people" column="hpeople"/>
        </collection>
    </resultMap>
        <select id="findAllUrbanSandH2" resultMap="findAllUrbanSandH2">
        select  urban.city_id
                ,urban.id
                ,urban.urban_name
                ,school.id sid
                ,school.urban_id surban_id
                ,school.school_name
                ,school.people speople
                ,hospital.id hid
                ,hospital.urban_id hurban_id
                ,hospital.hospital_name
                ,hospital.people hpeople
        from urban
            inner join school on urban.id = school.urban_id
            inner join hospital on urban.id = hospital.urban_id
    </select>
</mapper>

接下來(lái)就可以寫(xiě)兩個(gè)接口來(lái)測(cè)試這兩個(gè)xml配置是否正確,具體的代碼在最上面的碼云地址里,大家可以配合swagger進(jìn)行測(cè)試。

比較

方案一:需要執(zhí)行至少三次sql語(yǔ)句,開(kāi)啟三次事務(wù)才能完成本次請(qǐng)求。
方案二:需要執(zhí)行一次sql語(yǔ)句,開(kāi)啟一次事務(wù)就能完成本次請(qǐng)求

方案二比方案一的效率要高,但是在使用的時(shí)候,方案一的代碼可重用性要高

如果想要追求代碼重用性可以選擇方案一
如果比較在乎運(yùn)行的性能可以選擇方案二

到此這篇關(guān)于MyBatis中的collection兩種使用方法及效率比較的文章就介紹到這了,更多相關(guān)MyBatis collection使用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java經(jīng)典面試題最全匯總208道(三)

    Java經(jīng)典面試題最全匯總208道(三)

    這篇文章主要介紹了Java經(jīng)典面試題最全匯總208道(三),本文章內(nèi)容詳細(xì),該模塊分為了六個(gè)部分,本次為第三部分,需要的朋友可以參考下
    2023-01-01
  • Java調(diào)用外接設(shè)備詳解(制卡機(jī))

    Java調(diào)用外接設(shè)備詳解(制卡機(jī))

    這篇文章主要為大家詳細(xì)介紹了Java調(diào)用外接設(shè)備的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • sublime編譯器怎么運(yùn)行java程序

    sublime編譯器怎么運(yùn)行java程序

    Sublime是一款強(qiáng)大的代碼編輯器,它提供了豐富的功能和插件,可以幫助開(kāi)發(fā)者提高代碼的編寫(xiě)效率和質(zhì)量,通過(guò)安裝相關(guān)插件和進(jìn)行簡(jiǎn)單配置,我們可以輕松地在Sublime中編譯和運(yùn)行Java代碼,下面我們將詳細(xì)介紹如何配置Sublime,使其能夠高效地運(yùn)行Java代碼
    2024-06-06
  • mybatis-plus 如何判斷參數(shù)是否為空并作為查詢條件

    mybatis-plus 如何判斷參數(shù)是否為空并作為查詢條件

    這篇文章主要介紹了mybatis-plus 如何判斷參數(shù)是否為空并作為查詢條件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot redis使用lettuce配置多數(shù)據(jù)源的實(shí)現(xiàn)

    springboot redis使用lettuce配置多數(shù)據(jù)源的實(shí)現(xiàn)

    這篇文章主要介紹了springboot redis使用lettuce配置多數(shù)據(jù)源的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java線程生命周期的終止與復(fù)位

    Java線程生命周期的終止與復(fù)位

    這篇文章主要介紹了Java線程生命周期的終止與復(fù)位,Java的線程狀態(tài)描述放在Thread類里面的枚舉類State中.總共包含了6中狀態(tài),具體詳情需要的小伙伴可以參考一下文章描述
    2022-07-07
  • Java?Process中waitFor()的問(wèn)題詳解

    Java?Process中waitFor()的問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于Java?Process中waitFor()問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Netty分布式FastThreadLocal的set方法實(shí)現(xiàn)邏輯剖析

    Netty分布式FastThreadLocal的set方法實(shí)現(xiàn)邏輯剖析

    這篇文章主要為大家介紹了Netty分布式FastThreadLocal的set方法實(shí)現(xiàn)邏輯剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java實(shí)現(xiàn)操作JSON的便捷工具類完整實(shí)例【重寫(xiě)Google的Gson】

    Java實(shí)現(xiàn)操作JSON的便捷工具類完整實(shí)例【重寫(xiě)Google的Gson】

    這篇文章主要介紹了Java實(shí)現(xiàn)操作JSON的便捷工具類,基于重寫(xiě)Google的Gson實(shí)現(xiàn),涉及java針對(duì)json數(shù)據(jù)的各種常見(jiàn)轉(zhuǎn)換操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • 關(guān)于使用POI向word中添加圖片的問(wèn)題

    關(guān)于使用POI向word中添加圖片的問(wèn)題

    這篇文章主要介紹了關(guān)于使用POI向word中添加圖片的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

应用必备| 万安县| 灵川县| 新晃| 辛集市| 上饶县| 玛多县| 白银市| 泰来县| 汤原县| 天祝| 云霄县| 峡江县| 常山县| 莫力| 盐津县| 临高县| 开封市| 崇信县| 冷水江市| 盘山县| 镇江市| 黎平县| 辽宁省| 竹北市| 武隆县| 南康市| 双江| 洪洞县| 牡丹江市| 通渭县| 喀喇| 沈丘县| 五莲县| 舞阳县| 类乌齐县| 苍南县| 商河县| 当涂县| 泰州市| 翼城县|