MyBatis的學習(八)——關聯對映之多對多關聯
阿新 • • 發佈:2018-12-11
本次多對多關聯在之前進行的一對一和一對多關聯基礎之上進行。
需求:根據班級課程查詢選修學生資訊
新建課程表和課程表與學生表的中間表
建立Course實體類:
package com.little.entity; import java.util.ArrayList; import java.util.List; public class Course { private int course_id; private String course_name; private int course_time; private List<Student> list = new ArrayList<Student>(); public int getCourse_id() { return course_id; } public void setCourse_id(int course_id) { this.course_id = course_id; } public String getCourse_name() { return course_name; } public void setCourse_name(String course_name) { this.course_name = course_name; } public int getCourse_time() { return course_time; } public void setCourse_time(int course_time) { this.course_time = course_time; } public List<Student> getList() { return list; } public void setList(List<Student> list) { this.list = list; } @Override public String toString() { return "Course{" + "course_id=" + course_id + ", course_name='" + course_name + '\'' + ", course_time=" + course_time + ", list=" + list + '}'; } }
建立CourseMapper介面:
package com.little.mapper;
import com.little.entity.Course;
public interface CourseMapper {
Course getById1(Integer id);
Course getById2(Integer id);
}
建立CourseMapper介面實現配置檔案:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--suppress ALL --> <mapper namespace="com.little.mapper.CourseMapper"> <!--方式一,巢狀查詢結果--> <resultMap type="Course" id="CourseMap1"> <id column="course_id" property="course_id" /> <result column="course_name" property="course_name" /> <result column="course_time" property="course_time" /> <collection property="list" ofType="Student"> <id column="s_id" property="id" /> <result column="s_name" property="name" /> </collection> </resultMap> <select id="getById1" resultMap="CourseMap1"> select * from student,course_student,course where student.s_id=course_student.s_id and course_student.c_id=course.course_id and course.course_id=#{id} </select> <!--方式二,巢狀查詢條件--> <resultMap type="Course" id="CourseMap2"> <id column="course_id" property="course_id" /> <result column="course_name" property="course_name" /> <result column="course_time" property="course_time" /> <collection property="list" ofType="Student" column="course_id" select="getStudent" /> </resultMap> <select id="getById2" resultMap="CourseMap2"> select * from course where course_id=#{id} </select> <select id="getStudent" resultType="Student"> select student.s_id id,student.s_name name from student,course_student where student.s_id=course_student.s_id and course_student.c_id=#{id} </select> </mapper>
測試:
SqlSession session = MyBatisUtils.getSession(); CourseMapper courseMapper = session.getMapper(CourseMapper.class); @Test public void t5(){ Course byId1 = courseMapper.getById1(1); System.out.println(byId1); } @Test public void t6(){ Course byId2 = courseMapper.getById2(1); System.out.println(byId2); }
t5結果:
t6結果:
總的來說的話,多對多關係,實質就是兩個一對多關係的結合。