resultMap標(biāo)簽中里的collection標(biāo)簽詳解
resultMap標(biāo)簽中的collection標(biāo)簽
collection(一對多)
元素的作用和association元素的作用差不多一樣,事實(shí)上,它們非常類似,也是映射到JavaBean的某個(gè)“復(fù)雜類型” 屬性,只不過這個(gè)屬性是一個(gè)集合列表,即JavaBean內(nèi)部嵌套一個(gè)復(fù)雜數(shù)據(jù)類型(集合)。和使用association元素一樣,我們使用嵌套查詢, 或者從連接中嵌套結(jié)果集。
下面通過一個(gè)示例來演示coeltien 的具體應(yīng)用,示例需求獲取指定用戶的相關(guān)的信息和地址列表。
我們有實(shí)體類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;//職員所參加的所有運(yùn)動項(xiàng)目 }
員工間舉行了一個(gè)小型運(yùn)動會,又有Sport實(shí)體類如下:
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; }
可知一個(gè)員工可以參加多個(gè)運(yùn)動項(xiàng)目,所以我們的Employee對象內(nèi)部嵌套了一個(gè)復(fù)雜數(shù)據(jù)類型的屬性,sports,接下來在EmpDao接口中添加根據(jù)職員id獲取職員參加的項(xiàng)目列表的方法,代碼如下:
List<Employee> findSportsInfoByEmpId(@Param("eid")Integer id);
修改對應(yīng)的映射文件,由于Employee內(nèi)部嵌套了集合對象,因此需要使用collection來實(shí)現(xiàn)結(jié)果映射,實(shí)例代碼如下:
<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描述一對多的關(guān)系,ofType是集合所包含的類型,可以寫完整Java類名或別名 ?--> ?? ??? ?<collection property="sports" ofType="Sport"> ?? ??? ??? ?<id property="sportId" column="sportid"/> ?? ??? ??? ?<result property="sportName" column="sportname"/> ?? ??? ??? ?<result property="sportScore" column="sportscore"/> ?? ??? ?</collection> ?? ?</resultMap>
最后進(jìn)行測試,查看結(jié)果是否正確:
@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); ?? ??? ??? ?} ?? ??? ?} ?? ?}
運(yùn)行結(jié)果:
查詢成功,但是我們的collection標(biāo)簽寫在resultMap標(biāo)簽的內(nèi)部,不能達(dá)到復(fù)用,當(dāng)然是可以復(fù)用的,只需修改代碼如下:
<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標(biāo)簽中各屬性的說明
<result column="name" property="name"/> <!-- collection定義一個(gè)子集合對象返回 ofType:指定集合里面元素的類型 property屬性設(shè)置集合的屬性名 --> <collection property="passengers" ofType="Passenger"> <!-- id指的是主鍵, column是數(shù)據(jù)庫中的列,可以是別名 property映射的是實(shí)體類中的屬性 result是普通列(非主鍵) --> <id column="pid" property="id"/> <result column="pname" property="name"/> </collection> </resultMap>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于java實(shí)現(xiàn)DFA算法代碼實(shí)例
這篇文章主要介紹了基于java實(shí)現(xiàn)DFA算法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Java實(shí)現(xiàn)飛機(jī)大戰(zhàn)-II游戲詳解
《飛機(jī)大戰(zhàn)-II》是一款融合了街機(jī)、競技等多種元素的經(jīng)典射擊手游。游戲是用java語言實(shí)現(xiàn),采用了swing技術(shù)進(jìn)行了界面化處理,感興趣的可以了解一下2022-02-02Java Fluent Mybatis 分頁查詢與sql日志輸出詳解流程篇
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis關(guān)于分頁查詢、sql日志輸出流程2021-10-10springboot高并發(fā)下提高吞吐量的實(shí)現(xiàn)
這篇文章主要介紹了springboot高并發(fā)下提高吞吐量的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Spring MVC 4.1.3 + MyBatis零基礎(chǔ)搭建Web開發(fā)框架(注解模式)
本篇文章主要介紹了Spring MVC 4.1.3 + MyBatis零基礎(chǔ)搭建Web開發(fā)框架(注解模式),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Java使用poi導(dǎo)出ppt文件的實(shí)現(xiàn)代碼
Apache POI 是用Java編寫的免費(fèi)開源的跨平臺的 Java API,Apache POI提供API給Java對Microsoft Office格式檔案讀和寫的功能。本文給大家介紹Java使用poi導(dǎo)出ppt文件的實(shí)現(xiàn)代碼,需要的朋友參考下吧2021-06-06