您好,登錄后才能下訂單哦!
這篇文章主要介紹“resultMap中的collection標簽怎么用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“resultMap中的collection標簽怎么用”文章能幫助大家解決問題。
元素的作用和association元素的作用差不多一樣,事實上,它們非常類似,也是映射到JavaBean的某個“復雜類型” 屬性,只不過這個屬性是一個集合列表,即JavaBean內部嵌套一個復雜數據類型(集合)。和使用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對象內部嵌套了一個復雜數據類型的屬性,sports,接下來在EmpDao接口中添加根據職員id獲取職員參加的項目列表的方法,代碼如下:
List<Employee> findSportsInfoByEmpId(@Param("eid")Integer id);
修改對應的映射文件,由于Employee內部嵌套了集合對象,因此需要使用collection來實現結果映射,實例代碼如下:
<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); } } }
運行結果:
查詢成功,但是我們的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>
<result column="name" property="name"/> <!-- collection定義一個子集合對象返回 ofType:指定集合里面元素的類型 property屬性設置集合的屬性名 --> <collection property="passengers" ofType="Passenger"> <!-- id指的是主鍵, column是數據庫中的列,可以是別名 property映射的是實體類中的屬性 result是普通列(非主鍵) --> <id column="pid" property="id"/> <result column="pname" property="name"/> </collection> </resultMap>
關于“resultMap中的collection標簽怎么用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。