老师和学生之间就是一种多对多的关系
    一个老师会有多个学生,每个学生也会有不止一个老师
    所以他们之间的查询关系可以用多对多来描述

    如果我们把关系的控制权交给老师,那么可以使用mappedBy属性

    Teacher.java

    1. package com.ctguyxr.satokendemo.entity;
    2. import com.fasterxml.jackson.annotation.JsonBackReference;
    3. import lombok.Data;
    4. import javax.persistence.*;
    5. import java.util.List;
    6. /**
    7. * Created By Intellij IDEA
    8. *
    9. * @author Xinrui Yu
    10. * @date 2021/11/28 21:42 星期日
    11. */
    12. @Entity
    13. @Data
    14. @Table(name = "t_teacher")
    15. public class Teacher {
    16. @Id
    17. @GeneratedValue(strategy = GenerationType.IDENTITY)
    18. private Integer id;
    19. private String name;
    20. @JsonBackReference
    21. @ManyToMany(cascade = CascadeType.ALL)
    22. private List<Student> students;
    23. }

    student.java

    1. package com.ctguyxr.satokendemo.entity;
    2. import com.fasterxml.jackson.annotation.JsonManagedReference;
    3. import lombok.Data;
    4. import org.springframework.web.bind.annotation.GetMapping;
    5. import javax.persistence.*;
    6. import java.util.List;
    7. /**
    8. * Created By Intellij IDEA
    9. *
    10. * @author Xinrui Yu
    11. * @date 2021/11/28 21:41 星期日
    12. */
    13. @Entity
    14. @Data
    15. @Table(name = "t_student")
    16. public class Student {
    17. @Id
    18. @GeneratedValue(strategy = GenerationType.IDENTITY)
    19. private Integer id;
    20. private String name;
    21. @JsonManagedReference
    22. @ManyToMany(cascade = CascadeType.ALL,mappedBy = "students")
    23. private List<Teacher> teachers;
    24. }

    最后形成的三张表
    image.png

    image.png
    image.png

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

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