myBatis學習筆記(5)——一對多關聯表查詢
阿新 • • 發佈:2019-02-12
需求
上一篇筆記是一對一,一個學生對應一個老師,本次我們修改一下需求,一個老師有多個學生
參考: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>