mybatis实现班级,老师,学生的一对多查询
时间: 2024-03-19 20:18:32 浏览: 101
假设我们的班级、老师、学生的表名分别为class、teacher、student,其中班级和老师是一对多关系,老师和学生也是一对多关系。
首先,在 Class 表中,我们需要添加一个外键关联 Teacher 表,即 Teacher_id 字段。在 Teacher 表中,也需要添加一个外键关联 Class 表,即 Class_id 字段。在 Student 表中,我们需要添加一个外键关联 Teacher 表,即 Teacher_id 字段。
接下来,我们需要定义相应的实体类,Class、Teacher、Student,并在实体类中定义相应的属性以及 getter 和 setter 方法。同时,我们还需要在 Class 类中添加一个 Teacher 类型的属性,表示班级对应的老师,它的 getter 和 setter 方法也需要相应定义。在 Teacher 类中,我们需要添加一个 Class 类型的属性,表示老师所在的班级,同样需要添加相应的 getter 和 setter 方法。
现在,我们可以通过 MyBatis 来实现一对多查询了。我们可以先通过 Class 表查询到所有的班级,然后再通过 Teacher 表查询到每个班级对应的所有老师,最后再通过 Student 表查询到每个老师对应的所有学生。具体实现方式如下:
1. 在 ClassMapper.xml 文件中添加以下代码:
```xml
<select id="getClassWithTeachers" resultMap="classResultMap">
SELECT *
FROM class c
LEFT JOIN teacher t ON c.id = t.class_id
</select>
<resultMap id="classResultMap" type="com.example.Class">
<id property="id" column="id" />
<result property="name" column="name" />
<collection property="teachers" ofType="com.example.Teacher">
<id property="id" column="teacher_id" />
<result property="name" column="teacher_name" />
<result property="classId" column="class_id" />
</collection>
</resultMap>
```
2. 在 TeacherMapper.xml 文件中添加以下代码:
```xml
<select id="getTeacherWithStudents" resultMap="teacherResultMap">
SELECT *
FROM teacher t
LEFT JOIN student s ON t.id = s.teacher_id
WHERE t.class_id = #{classId}
</select>
<resultMap id="teacherResultMap" type="com.example.Teacher">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="classId" column="class_id" />
<collection property="students" ofType="com.example.Student">
<id property="id" column="student_id" />
<result property="name" column="student_name" />
<result property="teacherId" column="teacher_id" />
</collection>
</resultMap>
```
3. 在 ClassMapper.java 接口文件中添加以下代码:
```java
Class getClassWithTeachers(int id);
```
4. 在 Class.java 实体类中添加以下代码:
```java
private List<Teacher> teachers;
// getter 和 setter 方法
```
5. 在 Teacher.java 实体类中添加以下代码:
```java
private Class class;
private List<Student> students;
// getter 和 setter 方法
```
现在,我们就可以通过调用 getClassWithTeachers 方法来查询所有班级以及每个班级对应的老师,然后再通过调用 getTeacherWithStudents 方法来查询每个老师对应的所有学生。
阅读全文