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结果:

总的来说的话,多对多关系,实质就是两个一对多关系的结合。

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/83787473
今日推荐