mybatis之自动映射与自定义映射与级联查询

Mybatis中自动映射与自定义映射


## 自动映射【resultType】 自定义映射【resultMap】

解释:

  • 自动映射【resultType】:指的是自动将表中的字段与类中的属性进行关联映射
    • 自动映射解决不了两类问题
      • 多表连接查询时,需要返回多张表的结果集
      • 单表查询时,不支持驼峰式自动映射【不想用字段定义别名】
  • 自定义映射【resultMap】:自动映射解决不了问题,交给自定义映射
  • 注意:resultType与resultMap只能同时使用一个

问题:

有如下两表:
在这里插入图片描述
在这里插入图片描述

进行多表连接查询:

   SELECT *
        FROM
        tbl_employee e,
        tbl_dept d
        WHERE
        e.`dept_id` = d.`dept_id`
        AND
        e.`id` =1;
先用resultType自动映射查询:
    <select id="selectEmpAndDeptBypId" resultType="employee">
        SELECT
        e.`id`,
        e.`email`,
        e.`last_name`,
        e.`salary`,
        d.`dept_id`,
        d.`dept_name`
        FROM
        tbl_employee e,
        tbl_dept d
        WHERE
        e.`dept_id` = d.`dept_id`
        AND
        e.`id` = #{empId}
    </select>

在这里插入图片描述
如上图可以看到 查询dept部门时显示null 无法返回多张表的结果集,
此时可以用自定义映射【resultMap】进行查询

用resultMap自定义映射进行级联查询
 <resultMap id="empAndDeptResultMap" type="employee">
        <!--  定义主键字段与属性关联关系 -->
        <id column="id" property="id"></id>
        <!--  定义非主键字段与属性关联关系-->
        <result column="last_name" property="lastName"></result>
        <result column="email" property="email"></result>
        <result column="salary" property="salary"></result>
        <!--        为员工中所属部门,自定义关联关系-->
        <result column="dept_id" property="dept.deptId"></result>
        <result column="dept_name" property="dept.deptName"></result>
    </resultMap>
    <select id="selectEmpAndDeptBypId" resultMap="empAndDeptResultMap">
<!--        多表连接查询 使用resultMap解决多表查询问题-->
        SELECT
        e.`id`,
        e.`email`,
        e.`last_name`,
        e.`salary`,
        d.`dept_id`,
        d.`dept_name`
        FROM
        tbl_employee e,
        tbl_dept d
        WHERE
        e.`dept_id` = d.`dept_id`
        AND
        e.`id` = #{empId}
    </select>

188

posted @ 2023-02-15 00:06  taotooler  阅读(81)  评论(0)    收藏  举报  来源