ResultMap简介
如果查询返回的字段名与实体的属性名可以直接对应上,用resultType
如果查询返回的字段名与实体的属性名对应不上,或实体属性比较复杂,可以通过resultMap手动封装
例:
现有一个实体类Emp.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@Data
public class Emp {
private Integer id; //ID,主键
private String username; //用户名
private String password; //密码
private String name; //姓名
private Integer gender; //性别, 1:男, 2:女
private String phone; //手机号
private Integer job; //职位, 1:班主任,2:讲师,3:学工主管,4:教研主管,5:咨询师
private Integer salary; //薪资
private String image; //头像
private LocalDate entryDate; //入职日期
private Integer deptId; //关联的部门ID
private LocalDateTime createTime; //创建时间
private LocalDateTime updateTime; //修改时间
// 封装部门名称
private String deptName;
// 封装工作经历信息
private List<EmpExpr> exprList;
}
|
现在需要根据id查询员工信息及其工作经历信息,设计的mapper接口如下
1
|
Emp getById(Integer id);
|
对应的mapper映射文件如下
1
2
3
4
5
6
7
8
9
10
|
<select id="getById" resultType="Emp">
select e.*,
ee.id ee_id,
ee.begin ee_begin,
ee.end ee_end,
ee.company ee_company,
ee.job ee_job
from emp e left join emp_expr ee on e.id = ee.emp_id
where e.id = #{id}
</select>
|
如果一个员工有多段工作经历就会报错,就算只有一段工作经历也会丢失,查询结果会为null

所以此时就需要用到resultMap手动封装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<resultMap id="empResultMap" type="Emp">
<!-- id标签装的是主键 -->
<id property="id" column="id"/>
<!-- result标签装普通属性 -->
<result column="username" property="username" />
<result column="password" property="password" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="image" property="image" />
<result column="entry_date" property="entryDate" />
<result column="dept_id" property="deptId" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<!-- 封装 exprList -->
<!-- collection用来封装复杂属性,ofType指定集合中元素的类型,也就是集合泛型 -->
<collection property="exprList" ofType="EmpExpr">
<id column="ee_id" property="id"/>
<result column="ee_company" property="company"/>
<result column="ee_job" property="job"/>
<result column="ee_begin" property="begin"/>
<result column="ee_end" property="end"/>
<result column="ee_empid" property="empId"/>
</collection>
</resultMap>
<!-- 根据id查询员工基本信息及工作经历信息 -->
<select id="getById" resultMap="empResultMap">
select e.*,
ee.id ee_id,
ee.begin ee_begin,
ee.end ee_end,
ee.company ee_company,
ee.job ee_job
from emp e left join emp_expr ee on e.id = ee.emp_id
where e.id = #{id}
</select>
|
此时就可以正常查询到员工工作经历信息