1. 程式人生 > >MyBatis的學習(八)——關聯對映之多對多關聯

MyBatis的學習(八)——關聯對映之多對多關聯

本次多對多關聯在之前進行的一對一和一對多關聯基礎之上進行。

需求:根據班級課程查詢選修學生資訊

新建課程表和課程表與學生表的中間表

建立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結果:

總的來說的話,多對多關係,實質就是兩個一對多關係的結合。