" />

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

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

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

collection主要是應對表關系是一對多的情況

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

接下來的小案例包括:市,學校,醫(yī)院(隨便寫的),寫一個最簡單的demo

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

實體類:醫(yī)院

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

實體類:學校

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

實體類:市

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

第一種方式,采用select

首先我們要在學校和醫(yī)院接口對應的xml中寫出按照市的編號來查詢出所有數(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>
<!--實際工作不建議用 *,id就是mapper接口中對應的方法名,resultType就是查詢出結(jié)果后返回的list的泛型 
 urban_id = #{urbanId} 按照urban_id去查找-->
</mapper>

xml:學校

<?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>

接下來就是在市的xml中對學校和醫(yī)院的xml進行一個調(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>都可以不寫,直接寫List<School>和List<Hospital>
                                    type還是sql的返回類型
        collection中  property 是Urban中對應的字段
                                    javaType 是這個字段的類型
                                    ofType 是這個字段的泛型  這一項和上一項其實都可以不寫,寫上了看著更清晰
                                    select 是子表的按照市的編號查詢所有數(shù)據(jù)的方法 這里要寫下全路徑
                                    column 作為select語句的參數(shù)傳入, 也就是把市的編號id 傳給醫(yī)院和學校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"/>
<!--這上面這幾個字段就是urban表中,自帶的那幾個字段-->
        <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的類型  可以不寫
        ofType就是泛型,這個還是很有必要的,接下來的id result 就是這個類中定義的各種字段,要寫全
        如果涉及到的任何表中,在數(shù)據(jù)庫中有重復的字段名,那就必須要起別名。(例如各個表中的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>

接下來就可以寫兩個接口來測試這兩個xml配置是否正確,具體的代碼在最上面的碼云地址里,大家可以配合swagger進行測試。

比較

方案一:需要執(zhí)行至少三次sql語句,開啟三次事務才能完成本次請求。
方案二:需要執(zhí)行一次sql語句,開啟一次事務就能完成本次請求

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

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

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

相關文章

  • Java實現(xiàn)按比例縮小圖片

    Java實現(xiàn)按比例縮小圖片

    這篇文章主要為大家詳細介紹了Java實現(xiàn)按比例縮小圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 教你利用SpringBoot寫一個屬于自己的Starter

    教你利用SpringBoot寫一個屬于自己的Starter

    如果我們將可獨立于業(yè)務代碼之外的功配置模塊封裝成一個個starter,復用的時候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動裝配,簡直不要太爽,這篇文章主要給大家介紹了關于如何利用SpringBoot寫一個屬于自己的Starter,需要的朋友可以參考下
    2022-03-03
  • mybatis plus動態(tài)數(shù)據(jù)源切換及查詢過程淺析

    mybatis plus動態(tài)數(shù)據(jù)源切換及查詢過程淺析

    這篇文章主要介紹了mybatis plus動態(tài)數(shù)據(jù)源切換及查詢過程淺析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 教你如何正確了解java三大特性!!!!

    教你如何正確了解java三大特性!!!!

    所有的面向?qū)ο缶幊陶Z言的思路都是差不多的,而這三大特性,則是思路中的支柱點,接下來我就重點講解了一下java三大特性,感興趣的朋友跟隨腳本之家小編一起看看吧
    2021-07-07
  • Spring的BeanFactoryPostProcessor接口示例代碼詳解

    Spring的BeanFactoryPostProcessor接口示例代碼詳解

    這篇文章主要介紹了Spring的BeanFactoryPostProcessor接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    今天小編就為大家分享一篇Java 按行讀取文件按行寫入文件并以空格分割字符串的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java使用spring實現(xiàn)讀寫分離的示例代碼

    java使用spring實現(xiàn)讀寫分離的示例代碼

    本篇文章主要介紹了java使用spring實現(xiàn)讀寫分離的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 談談對Java多態(tài)性的一點理解

    談談對Java多態(tài)性的一點理解

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定
    2017-08-08
  • Java中如何避免sql注入實例詳解

    Java中如何避免sql注入實例詳解

    SQL注入是最常見的攻擊方式之一,它不是利用操作系統(tǒng)或其它系統(tǒng)的漏洞來實現(xiàn)攻擊的,而是程序員因為沒有做好判斷,被不法用戶鉆了SQL的空子,下面這篇文章主要給大家介紹了關于Java中如何避免sql注入的相關資料,需要的朋友可以參考下
    2022-01-01
  • SpringMVC中@ModelAttribute與@RequestBody的區(qū)別及說明

    SpringMVC中@ModelAttribute與@RequestBody的區(qū)別及說明

    這篇文章主要介紹了SpringMVC中@ModelAttribute與@RequestBody的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論