老师和学生之间就是一种多对多的关系
一个老师会有多个学生,每个学生也会有不止一个老师
所以他们之间的查询关系可以用多对多来描述
如果我们把关系的控制权交给老师,那么可以使用mappedBy属性
Teacher.java
package com.ctguyxr.satokendemo.entity;import com.fasterxml.jackson.annotation.JsonBackReference;import lombok.Data;import javax.persistence.*;import java.util.List;/*** Created By Intellij IDEA** @author Xinrui Yu* @date 2021/11/28 21:42 星期日*/@Entity@Data@Table(name = "t_teacher")public class Teacher {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;private String name;@JsonBackReference@ManyToMany(cascade = CascadeType.ALL)private List<Student> students;}
student.java
package com.ctguyxr.satokendemo.entity;import com.fasterxml.jackson.annotation.JsonManagedReference;import lombok.Data;import org.springframework.web.bind.annotation.GetMapping;import javax.persistence.*;import java.util.List;/*** Created By Intellij IDEA** @author Xinrui Yu* @date 2021/11/28 21:41 星期日*/@Entity@Data@Table(name = "t_student")public class Student {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;private String name;@JsonManagedReference@ManyToMany(cascade = CascadeType.ALL,mappedBy = "students")private List<Teacher> teachers;}
最后形成的三张表


查询学生的老师的时候,观察sql语句不难发现,查询的是 t_teacher_students 这张表

如果没有mappedBy的话,还会再生成一张 t_student_teaches 这张表
查询学生的老师的时候,查询的也是t_student_teaches 这张表
