代码示例
public class Teacher {
private String tId
;
private String rank
;
private BasicInfo basicInfo
;
private List
<Student> studentList
;
}
public class BasicInfo {
private String tName
;
private String tAge
;
}
public class Student {
private String SName
;
private String SAge
;
}
<mapper>
<resultMap id="TeacherMap" type="Teacher(实体类)">
<id property="tId(POJO对象主键属性)" column="TID(表字段)" jdbcType="VARCHAR"/>
<reslut property="rank" column="RANK" jdbcType="VARCHAR"/>
<association property="basicInfo" javaType="BasicInfo(实体类)" resultMap="basicInfoMap"/>
<collection property="studentList" ofType="Student(实体类)" resultMap="studentList"/>
</resultMap>
<resultMap id="basicInfoMap" type="BasicInfo(实体类)">
<reslut property="tName" column="TNAME" jdbcType="VARCHAR"/>
<reslut property="tAge" column="TAGE" jdbcType="VARCHAR"/>
</resultMap>
<resultMap id="studentList" type="Student(实体类)">
<reslut property="SName" column="SNAME" jdbcType="VARCHAR"/>
<reslut property="SAge" column="SAGE" jdbcType="VARCHAR"/>
</resultMap>
<select id="getTeacherInfo" resultMap="TeacherMap(返回值为映射的对象)" parameterType="java.util.Map">
</select>
</mapper>
注意事项
一、MyBatis的resultMap只用于配置结果如何映射,id的唯一作用就是在嵌套的映射配置时判断数据是否相同,当配置id标签时,MyBatis只需要逐条比较所有数据中id标签字段值是否相同即可,可以提高处理效率。 1、id标签也可以配置多个,比如联合主键时。 2、很可能也会出现没有配置id的情况,这时MyBatis就会把resultMap中所有字段进行比较,如果所有字段的值都相同就合并,只要有一个字段值不同,就不合并。这时,当结果集字段数为M,记录数N,最少M×N次比较,相比配置id时的N次比较,效率相差更多,所以要尽可能配置id标签。 3、在嵌套结果配置id属性时如果查询语句中没有查询id属性配置的列,就会导致id对应的值为null。这种情况下,所有值的id都相同,因此会使嵌套的集合中只有一条数据。所以在配置id列时,查询语句中必须包含该列。
二、collection 支持的属性以及属性的作用和association 完全相同。虽然association和collection标签是分开介绍的,但是这两者可以组合使用或者互相嵌套使用,也可以使用符合自己需要的任何数据结构,不需要局限于数据库表之间的关联关系。