一、嵌套的resultMap
<?xmlversion="1.0"encoding="utf8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.abc.mapper.StudentMapper">
<selectid="getById"parameterType="int"resultMap="studentResultMap">
select s.id s_id,
s.name s_name,
s.gender s_gender,
s.major s_major,
s.grade s_grade,
t.id t_id,
t.name t_name,
t.gender t_gender,
t.title t_title,
t.research_area t_research_area
from student s left join teacher t
on s.supervisor_id = t.id
where s.id=#{id}
</select>
<resultMapid="studentResultMap"type="Student">
<idproperty="id"column="s_id"/>
<resultproperty="name"column="s_name"/>
<resultproperty="gender"column="s_gender"/>
<resultproperty="major"column="s_major"/>
<resultproperty="grade"column="s_grade"/>
<!--使用resultMap属性引用下面的教师实体映射-->
<associationproperty="supervisor"javaType="Teacher"
resultMap="supervisorResultMap"/>
</resultMap>
<!--教师实体映射-->
<resultMapid="supervisorResultMap"type="Teacher">
<idproperty="id"column="t_id"/>
<resultproperty="name"column="t_name"/>
<resultproperty="gender"column="t_gender"/>
<resultproperty="researchArea"column="t_research_area"/>
<resultproperty="title"column="t_title"/>
</resultMap>
</mapper>
二、嵌套的select语句
<?xmlversion="1.0"encoding="utf8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.abc.mapper.StudentMapper">
<selectid="getById"parameterType="int"resultMap="studentResultMap">
select id,name,gender,major,grade,supervisor_id from student where id=#{id}
</select>
<selectid="selectSupervisor"parameterType="int"resultMap="supervisorResultMap">
select id,name,gender,title,research_area
from teacher where id=#{id}
</select>
<resultMapid="studentResultMap"type="Student">
<idproperty="id"column="id"/>
<resultproperty="name"column="name"/>
<resultproperty="gender"column="gender"/>
<resultproperty="major"column="major"/>
<resultproperty="grade"column="grade"/>
<!--column="supervisor_id"不能少。此列的值作为参数
传递给要引用的select语句,用来查询相应学生的指导教师
的信息。select属性指定要引用的select语句-->
<associationproperty="supervisor"javaType="Teacher"
column="supervisor_id"select="selectSupervisor"/>
</resultMap>
<!--教师实体映射-->
<resultMapid="supervisorResultMap"type="Teacher">
<idproperty="id"column="id"/>
<resultproperty="name"column="name"/>
<resultproperty="gender"column="gender"/>
<resultproperty="researchArea"column="research_area"/>
<resultproperty="title"column="title"/>
</resultMap>
</mapper>
association元素的属性javaType="Teacher"也可以不要,这大概也是因为引用的select语句中已经指明了要用到的resultMap。