一、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>
像上面这样使用定义一个简单的ResultMap。其中id属性为该ResultMap的ID,type属性为该ResultMap解析出的Java对象类型。
2、使用定义
在使用定义ResultMapCollection时,需要为每个ResultMap指定一个ID和一个返回类型,每个ResultMap都有唯一一个ID,这个ID被用于关联查询语句和Java对象属性。下面是一个简单的使用定义的例子:
<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(通过标签),可以构建出具有复杂类型的Java对象。
<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>
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159314.html