溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

resultMap中的collection標簽怎么用

發(fā)布時間:2022-02-07 11:04:45 來源:億速云 閱讀:483 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“resultMap中的collection標簽怎么用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“resultMap中的collection標簽怎么用”文章能幫助大家解決問題。

    resultMap標簽中的collection標簽

    collection(一對多)

    元素的作用和association元素的作用差不多一樣,事實上,它們非常類似,也是映射到JavaBean的某個“復雜類型” 屬性,只不過這個屬性是一個集合列表,即JavaBean內部嵌套一個復雜數(shù)據(jù)類型(集合)。和使用association元素一樣,我們使用嵌套查詢, 或者從連接中嵌套結果集。

    下面通過一個示例來演示coeltien 的具體應用,示例需求獲取指定用戶的相關的信息和地址列表。

    我們有實體類Employee如下:

    package com.xyj.entity;
    import java.util.List;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Employee {
    	private int eid;
    	private String ename;
    	private String epwd;
    	private String address;
    	private String tel;
    	private List<Sport> sports;//職員所參加的所有運動項目
    }

    員工間舉行了一個小型運動會,又有Sport實體類如下:

    package com.xyj.entity;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Sport {
        private int sportId;
        private String sportName;
        private String sportScore;
    }

    可知一個員工可以參加多個運動項目,所以我們的Employee對象內部嵌套了一個復雜數(shù)據(jù)類型的屬性,sports,接下來在EmpDao接口中添加根據(jù)職員id獲取職員參加的項目列表的方法,代碼如下:

    List<Employee> findSportsInfoByEmpId(@Param("eid")Integer id);

    修改對應的映射文件,由于Employee內部嵌套了集合對象,因此需要使用collection來實現(xiàn)結果映射,實例代碼如下:

    <select id="findSportsInfoByEmpId" resultMap="empmap">
            select e.*,s.*
            from employee as e,sport as s
            where e.eid=s.eid
            and e.eid=#{eid}
        </select>
        
        <resultMap type="Employee" id="empmap">
            <id property="eid" column="eid"/>
            <result property="ename" column="ename"/>
            <result property="epwd" column="epwd"/>
            <result property="address" column="address"/>
            <result property="tel" column="tel"/>
            <!-- collection描述一對多的關系,ofType是集合所包含的類型,可以寫完整Java類名或別名  -->
            <collection property="sports" ofType="Sport">
                <id property="sportId" column="sportid"/>
                <result property="sportName" column="sportname"/>
                <result property="sportScore" column="sportscore"/>
            </collection>
        </resultMap>

    最后進行測試,查看結果是否正確:

    @org.junit.Test
        public void test() {
            SqlSession session = MyBatisUtils.getSqlSession();
            EmpDao ed = session.getMapper(EmpDao.class);
            List<Employee> list = ed.findSportsInfoByEmpId(1);
            for (Employee emp : list) {
                for (Sport e : emp.getSports()) {
                    System.out.println(e);
                }
            }
        }

    運行結果: 

    resultMap中的collection標簽怎么用

    查詢成功,但是我們的collection標簽寫在resultMap標簽的內部,不能達到復用,當然是可以復用的,只需修改代碼如下:

    <select id="findSportsInfoByEmpId" resultMap="empmap">
    		select e.*,s.*
    		from employee as e,sport as s
    		where e.eid=s.eid
    		and e.eid=#{eid}
    	</select>
    	
    	<resultMap type="Employee" id="empmap">
    		<id property="eid" column="eid"/>
    		<result property="ename" column="ename"/>
    		<result property="epwd" column="epwd"/>
    		<result property="address" column="address"/>
    		<result property="tel" column="tel"/>
    		<collection property="sports" ofType="Sport" resultMap="sportmap"></collection>
    	</resultMap>
    	
    	<resultMap type="Sport" id="sportmap">
    		<id property="sportId" column="sportid"/>
    		<result property="sportName" column="sportname"/>
    		<result property="sportScore" column="sportscore"/>
    	</resultMap>

    collection標簽中各屬性的說明

    <result column="name" property="name"/>
    <!--
    collection定義一個子集合對象返回
    ofType:指定集合里面元素的類型
    property屬性設置集合的屬性名
    -->
    <collection property="passengers" ofType="Passenger">
    <!--
    id指的是主鍵,
    column是數(shù)據(jù)庫中的列,可以是別名
    property映射的是實體類中的屬性
    result是普通列(非主鍵)
    -->
    <id column="pid" property="id"/>
    <result column="pname" property="name"/>
    </collection>
    </resultMap>

    關于“resultMap中的collection標簽怎么用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

    AI