本次多对多关联在之前进行的一对一和一对多关联基础之上进行。
需求:根据班级课程查询选修学生信息
新建课程表和课程表与学生表的中间表
建立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结果:
总的来说的话,多对多关系,实质就是两个一对多关系的结合。