老师和学生之间就是一种多对多的关系
一个老师会有多个学生,每个学生也会有不止一个老师
所以他们之间的查询关系可以用多对多来描述
如果我们把关系的控制权交给老师,那么可以使用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
这张表