一、ResultMapCollection概述
在MyBatis中,查询结果集通常会转化为Java对象,而ResultMapCollection就是用于映射查询结果集中每个记录的Java对象集合。一个ResultMapCollection可以包含多个ResultMap,并且每个ResultMap定义了如何将一条查询结果转换为一个Java对象。一个ResultMap可以定义一个复杂对象或嵌套多个ResultMap来定义一个复杂对象图。
二、定义ResultMapCollection
定义ResultMapCollection通常可以通过iBatis的Mapper XML实现,定义时常用的两个标签是
1、使用
定义
<resultMap id="UserMap" type="User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
像上面这样使用
2、使用
定义
在使用
<resultMapCollection id="allUser" type="java.util.ArrayList">
<resultMap id="UserMap" type="User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
</resultMapCollection>
三、使用ResultMapCollection实现嵌套查询
ResultMapCollection可以用于嵌套查询,通过在ResultMap中嵌套其他ResultMap(通过
<resultMap id="UserMap" type="User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
<association property="department" javaType="Department" resultMap="DepartmentMap"/>
</resultMap>
<resultMap id="DepartmentMap" type="Department">
<id property="id" column="id" />
<result property="name" column="name" />
</resultMap>
四、使用ResultMapCollection实现动态查询
ResultMapCollection可以被用于动态查询,使用SQL选择将不同的ResultMapAnnotation集合作为ResultMapCollection返回。
<resultMapCollection id="allUser" type="java.util.ArrayList">
<resultMap id="UserMap1" type="User">
<id result="id" column="id" />
<result property="name" column="name" />
</resultMap>
<resultMap id="UserMap2" type="User">
<id result="id" column="id" />
<result property="address" column="address" />
<result property="tel" column="tel" />
</resultMap>
</resultMapCollection>
五、使用ResultMapCollection实现属性合并
ResultMapCollection可以用于属性合并,即将多个ResultMapAnnotation组合成一个复合对象。
<resultMapCollection id="allUser" type="java.util.ArrayList">
<resultMap id="EmpMap" type="Emp">
<id result="id" column="id" />
<association property="detail" javaType="Detail" resultMap="DetailMap" />
<association property="education" javaType="Education" resultMap="EducationMap" />
</resultMap>
<resultMap id="DetailMap" type="Detail">
<result property="salary" column="salary" />
<result property="joinDate" column="join_date" />
</resultMap>
<resultMap id="EducationMap" type="Education">
<result property="degree" column="degree" />
<result property="school" column="school" />
</resultMap>
</resultMapCollection>