Mybatis 一对多 关联查询查询

一对多 与 一对一 查询有许多相似之处。 
最主要的区别是 查询结果是list,与之对应的标签为collection.

班级和学生,一个班有多个学生,而每个学生只能属于一个班。 
此时班级编号作为学生表的外码。

学生实体类:

public class Student {

    private int id;
    private String name;
    }

这时班级类修改为:

public class Classes {

    private int id;
    private String name;
    private Teacher teacher;

    **private List<Student> list**;
    }

根据班级编号,查询班级信息,以及此班所有学生的信息。 
同样有两种方法: 
第一种:

<select id="getClass" parameterType="int" resultMap="getClassMap">
        SELECT * from class c,teacher t,student s WHERE  s.class_id=c.c_id and c.c_id=#{id}
    </select>
        <resultMap type="Classes" id="getClassMap">
        <id property="id" column="c_id"/>
        <result property="name" column="c_name"/>
        <collection property="list" ofType="Student">
            <id property="id" column="s_id"/>
            <result property="name" column="s_name"/>
        </collection>
    </resultMap>

第二种:

<select id="getClass2" resultMap="getClassMap2">
        SELECT * FROM class WHERE c_id=#{id}
    </select>

    <select id="getStudent" resultType="Student">
        SELECT s_id id, s_name name FROM student WHERE class_id=#{id}
    </select>

        <resultMap type="Classes" id="getClassMap2">
        <id property="id" column="c_id"/>
        <result property="name" column="c_name"/>   
        <collection property="list" column="c_id" select="getStudent"></collection>
    </resultMap>

摘自:https://blog.csdn.net/u010785025/article/details/51089233

原文地址:https://www.cnblogs.com/gXing/p/8568413.html