美文网首页
二.mybatis高级结果映射

二.mybatis高级结果映射

作者: 蜗牛1991 | 来源:发表于2017-11-24 14:12 被阅读0次

一.介绍与应用场景

  • 通常我们会遇到这样一个业务场景:有一个班级叫A班,班级有10个学生(B),学生包括了性别,年龄,家庭情况(C),每个学生家庭情况包含住址,父母的姓名的属性,那么现在通过mysql关联查询查询到以上所有信息,那么查询结果如何映射成一个对象,这就是mybatis高级结果映射要做的事情。
  • 其中涉及到一对多与一对一的结果映射关系,想了解更多,请看文档,不在赘述。
    结果映射介绍

二准备工作

  • 建表


    image.png
  • 建DTO
    课程
public class Course {
    private Integer id;
    private String cousreName;
    List<Student> students;
}

学生

public class Student {
    private Integer id;
    private String stuName;
    private Address  address;
}

家庭情况

public class  Address {
    private Integer id;
    private String address;
}
  • .结果映射与sql
<resultMap id="testMap" type="course">
  <id column="id" jdbcType="INTEGER" property="id" />
  <result column="cousre_name" jdbcType="VARCHAR"property="cousreName" />
  <collection property=" students" ofType="student">
    <id column="s_id" jdbcType="INTEGER" property="id" />
    <result column="stu_name " jdbcType="VARCHAR" property="stuName" />
    <association property="address" javaType="Address">
     <id column="a_id" jdbcType="INTEGER" property="id" />
      <result column="address" jdbcType="VARCHAR" property="address" />
    </association>
  </collection>
</resultMap>

<select id="findCommodityPageById" resultMap="commodityPageModal" >
  SELECT
  c.id ,
  c.course_name ,
  s.id as s_id,
  s.stu_name ,
  a.id,
  a.address
  FROM  course c 
  LEFT JOIN student s
  ON c.id=s.course_id
  LEFT JOIN  address a
  ON s.id=a.stu_id
</select>

三.分析

  • 属性分析resultMap: id="testMap"(自定义),type="course"(映射的dto)
  • 属性分析result: column(mysql字段),property(dt对应字段)
  • collection(一对多映射),ofType(子类映射的dto)
  • association(一对一)
  • 那为什么我的id有id,a_id,s_id呢?结果映射如果不同dto有相同名称属性,需要映射成不同名字,否则只会映射第一个属性,这点要注意。

相关文章

网友评论

      本文标题:二.mybatis高级结果映射

      本文链接:https://www.haomeiwen.com/subject/sevxbxtx.html