微服务 教程
1085个小节阅读:195.6k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
MyBatis多对多关联查询本质就是两个一对多关联查询。
例如有老师类和班级类:
一个老师对应多个班级,也就是老师类中有一个班级集合属性。
一个班级对应多个老师,也就是班级类中有一个老师集合属性。
实体类设计如下:
xxxxxxxxxx
public class Teacher {
private Integer tid;
private String tname;
private List<Classes> classes;
// 省略getter/setter/toString
}
public class Classes {
private Integer cid;
private String className;
private List<Student> studentList;
private List<Teacher> teacherList;
// 省略getter/setter/toString
}
在数据库设计中,需要建立中间表,双方与中间表均为一对多关系。
接下来测试查询老师时,将关联的班级集合查询出来。
xxxxxxxxxx
public interface TeacherMapper {
List<Teacher> findAll();
}
xxxxxxxxxx
<resultMap id="teacherMapper" type="com.itbaizhan.pojo.Teacher">
<id column="tid" property="tid"></id>
<result column="tname" property="tname"></result>
<collection property="classes" column="tid" ofType="com.itbaizhan.pojo.Classes">
<id column="cid" property="cid"></id>
<result column="className" property="className"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="teacherMapper">
select *
from teacher
left join classes_teacher
on teacher.tid = classes_teacher.tid
left join classes
on classes_teacher.cid = classes.cid
</select>
xxxxxxxxxx
public void testFindAllTeacher() {
TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
List<Teacher> all = teacherMapper.findAll();
all.forEach(System.out::println);
}
如果想查询班级时,将关联的老师集合查询出来,只需要修改班级映射文件的Sql语句和<resultMap>
即可:
xxxxxxxxxx
<resultMap id="classesMapper" type="com.itbaizhan.pojo.Classes">
<id property="cid" column="cid"></id>
<result property="className" column="className"></result>
<!-- 集合列 property:属性名 column:关联列名 ofType:集合的泛型 -->
<collection property="studentList" column="classId" ofType="com.itbaizhan.pojo.Student">
<id property="sid" column="sid"></id>
<result property="name" column="name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
</collection>
<collection property="teacherList" column="cid" ofType="com.itbaizhan.pojo.Teacher">
<id property="tid" column="tid"></id>
<result property="tname" column="tname"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="classesMapper">
select *
from classes
left join student
on classes.cid = student.classId
left join classes_teacher
on classes.cid = classes_teacher.cid
left join teacher
on classes_teacher.tid = teacher.tid;
</select>
1.关于MyBatis多对多关系,以下说法正确的是:
A 一方实体类中有另一方实体类的集合属性。
B 一方实体类中有另一方实体类的对象属性。
C 两方实体类中都有另一方实体类的对象属性。
D 两方实体类中都有另一方实体类的集合属性。
1=>D