- 多对多联系(n:m):
观察 student 表和 course 表,两个表之间的关系是多对多联系,即每个学生可以
选修多门课,每门课程可以由多位学生学习; - 第三方表: takes 表,该表存储学生选修某门课程的成绩数据;
- 注意:多对多联系一定涉及到 3 个表; 查询需求:查询每个学生选修的课程信息,及课程的分数
步骤:
- 修改 Student 实体类
在 Student 实体类中,添加一个 List courseList 属性:
private List<Course> courseList;
为该属性生成相应的 get/set 方法;
- 修改 Course 实体类
在 Course 实体类中,添加一个 List takeList 属性:
为该属性生成相应的 get/set 方法;
private List<Takes> takesList;
- 编写 sql 映射文件 StudentMapper.xml
无非就是多一了一个collection而已
<!--定义结果集:学生的多个选课及每门课程的分数-->
<resultMap id="StudentCourseTakesMap" type="com.yyz.bean.Student">
<id property="ID" column="ID"/>
<result property="sname" column="sname"/>
<result property="sdept" column="dept_name"/>
<result property="tot_cred" column="tot_cred"/>
<!--选修多门课程-->
<collection property="courseList" ofType="com.yyz.bean.Course">
<id property="course_id" column="course_id"/>
<result property="title" column="title"/>
<result property="dept_name" column="dept_name"/>
<result property="credits" column="credits"/>
<!--每门课程有多个成绩-->
<collection property="takesList" ofType="com.yyz.bean.Takes">
<id property="ID" column="ID"/>
<id property="course_id" column="course_id"/>
<id property="sec_id" column="sec_id"/>
<id property="semester" column="semester"/>
<id property="year" column="year"/>
<result property="grade" column="grade"/>
</collection>
</collection>
</resultMap>
- 编写sql
<select id="getStudGrade" resultMap="StudentCourseTakesMap">
SELECT * FROM student,takes,course
WHERE student.`ID`=takes.`ID`
AND course.`course_id`=takes.`course_id`
</select>