这里我建立的多对多的关系是教师和学生之间的关系
多表之间的查询我们仍然可以使用左连接查询
第一步:mapper
教师的mapper
/**
* 查询老师,并把关联的学生也查出来
* @return
*/
List<Teacher> getAllTeacher();
第二步:mapper.xml
由于多对多其实就是双方的一对多,本质上还是可以理解为一对多关系,所以结果的封装和一对多没有太大的区别,主要是sql的不同
<resultMap id="teacherMapper" type="com.ctbu.domain.Teacher">
<id property="teacherId" column="teacherId"/>
<result property="teacherName" column="teacherName"/>
<collection property="students" javaType="list" ofType="com.ctbu.domain.Student">
<id property="studentId" column="studentId"/>
<result property="studentName" column="studentName"/>
</collection>
</resultMap>
<select id="getAllTeacher" resultMap="teacherMapper">
SELECT * FROM teacher t
LEFT JOIN teacher_student ts on
t.teacherId=ts.teacherId
LEFT JOIN student s on
ts.studentId=s.studentId;
</select>
第三步:测试类
@Test
public void test1(){
SqlSession session = MyUtils.openSession();
TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
List<Teacher> teachers = teacherMapper.getAllTeacher();
for (Teacher teacher : teachers) {
System.out.println(teacher);
}
session.close();
}