1. 程式人生 > >myBatis學習筆記(5)——一對多關聯表查詢

myBatis學習筆記(5)——一對多關聯表查詢

需求

上一篇筆記是一對一,一個學生對應一個老師,本次我們修改一下需求,一個老師有多個學生
參考:myBatis學習筆記(4)——一對一關聯表查詢
老師類:

package com.bank.entities;

import java.util.List;

public class Teacher {
    private int teacherId;
    private String teacherName;
    private List<Student> stuList;

    public List<Student> getStuList() {
        return
stuList; } public void setStuList(List<Student> stuList) { this.stuList = stuList; } public int getTeacherId() { return teacherId; } public void setTeacherId(int teacherId) { this.teacherId = teacherId; } public String getTeacherName() { return
teacherName; } public void setTeacherName(String teacherName) { this.teacherName = teacherName; } @Override public String toString() { return "Teacher [teacherId=" + teacherId + ", teacherName=" + teacherName + ", stuList=" + stuList + "]"; } }

方法一

與上一個筆記,有兩種方法,套路都是一樣的,直接看程式碼,不多解釋

    <!-- 方法一  -->
    <resultMap type="Teacher" id="teacherResultMap1">
        <id property="teacherId" column="teacher_id" />
        <result property="teacherName" column="teacher_name" />
        <!-- collection 是用來處理一對多關係的結果對映 -->
        <collection property="stuList" ofType="Student">
            <id property="stuId" column="stu_id" />
            <result property="stuName" column="stu_name" />
        </collection>
    </resultMap>

    <select id="getTeacher" parameterType="int" resultMap="teacherResultMap1">
        select * from student s,teacher t 
        where 
            s.teacher_id = t.teacher_id 
        and t.teacher_id = #{id}
    </select>

跟一對一不同的主要是用了collection 標籤,ofType 屬性表示該集合內元素的型別

方法二

<!-- 方法二  -->
    <select id="getTeacher2" parameterType="int" resultMap="teacherResultMap2">
        select teacher_id teacherId,teacher_name teacherName from teacher where teacher_id=#{id}
    </select>

    <select id="getStudents" parameterType="int" resultType="Student">
        select stu_id stuId,stu_name stuName,teacher_id teacherId from student where teacher_id=#{id}
    </select>

    <resultMap type="Teacher" id="teacherResultMap2">
        <id property="teacherId" column="teacher_id" />
        <result property="teacherName" column="teacher_name" />
        <!-- association是用來處理一對多關係的結果對映 -->
        <collection property="stuList" column="teacherId" select="getStudents">
        </collection>
    </resultMap>