MyBatis-------级联查询(一对一、一对多)

一、持有其它对象

package com.tyzhou.stu.model;

import lombok.Data;

@Data
public class ClassRoom {
    /**
     * 班级编号
     */
    private Long id;
    private String name;
    /**
     * 一个班级有一个班主任
     */
    private Teacher teacher;
}

@Data
public class Teacher {

    private Long id;
    private String name;
}

        核心:映射到某个对象的某个属性中 

    <select id="queryById" resultType="com.tyzhou.stu.model.ClassRoom">
        SELECT
           m.id id,
           m.name name,
           t.id "teacher.id",
           t.name "teacher.name"
        FROM m_classroom m
        JOIN m_teacher t ON m.teacherId = t.id
        WHERE m.id = #{id}
    </select>

二、持有其它对象集合

         一个老师会管多个班级。

         

@Data
public class Teacher {

    private Long id;
    private String name;
    /**
     * 一个老师管理多个班级
     */
    List<ClassRoom> classRoomList;
}

@Data
public class ClassRoom {
    /**
     * 班级编号
     */
    private Long id;
    private String name;
}

拨云见日:

(1) 最先查询出老师的相关数据,并使用resultMap进行映射

(2) 在resultMap映射完老师实体后,将老师实体的主键ID作为参数传递

(3) 最后一个查询,它接收老师主键ID作为条件,查询出老师管理的多个班级集合

    <!-- 第一步:查询主表数据,并使用resultMap -->
    <select id="queryTeacherById" resultMap="getClassRoom">
        SELECT
            m.id  tId,
            m.name tName
        FROM
            m_teacher m
        WHERE
            m.id = #{id}
    </select>

    <!-- 第二步:映射主表数据字段,并传递级联查询的主表ID -->
    <resultMap id="getClassRoom" type="com.tyzhou.stu.model.Teacher">
        <id column="tId" property="id"/>
        <result column="tName" property="name"/>
        <!--
              property:Java中list的引用名
              ofType:List的泛型
              select:即将要查询的SQL语句的id
              column:传递过去的查询参数
       -->
        <collection property="classRoomList"
                    ofType="com.tyzhou.stu.model.ClassRoom"
                    select="getClassRoom" column="tId">
        </collection>
    </resultMap>

    <!-- 第三步:通过传递过来的ID查询多个List -->
    <select id="getClassRoom" parameterType="long"
            resultType="com.tyzhou.stu.model.ClassRoom">
        SELECT
            m.id id,
            m.name name
        FROM
            m_classroom m
        WHERE
            m.teacherId = #{tId}
    </select>

更多MyBatis使用经验

         MyBaits操作经验目录贴

 

posted @ 2022-07-17 12:14  小大宇  阅读(249)  评论(0编辑  收藏  举报