java 一对多、多对多关系示例

一对多

生活中常见一对多关系的例子,如一个老师教多个学生,一个学生属于一个老师,那么这就是一个典型的一对多关系,可以通过集合进行关系的表示。

定义一个学生类

public class Student {
    
    
    private Integer id;
    private String name;
    private byte age;
    private Teacher teacher;

    public Teacher getTeacher() {
    
    
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
    
    
        this.teacher = teacher;
    }

    public Student(Integer id, String name, byte age) {
    
    
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public byte getAge() {
    
    
        return age;
    }

    public void setAge(byte age) {
    
    
        this.age = age;
    }

    @Override
    public String toString() {
    
    
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +'}';
    }
}
在以上的 Student 类中包含了一个 Teacher 属性,表示一个学生属于一个老师。在程序运行时,只需要传入 Teacher 类的引用就可以完成这样的关系。

定义一个老师类

import java.util.HashSet;

public class Teacher {
    
    
    private Integer id;
    
    private String name;
    
    private byte sex;
    
    private HashSet<Student> students = new HashSet<>();
    
    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public byte getSex() {
    
    
        return sex;
    }

    @Override
    public String toString() {
    
    
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex=" + sex +
                ", students=" + students +
                '}';
    }

    public Teacher(Integer id, String name, byte sex) {
    
    
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public void setSex(byte sex) {
    
    
        this.sex = sex;
    }

    public HashSet<Student> getStudents() {
    
    
        return students;
    }

    public void setStudents(HashSet<Student> students) {
    
    
        this.students = students;
    }
}

逻辑关系

//一对多
public class OneToManyDemo {
    
    
    public static void main(String[] args) {
    
    
        Student heyi1 = new Student(1, "heyi1", (byte) 2);
        Student heyi2 = new Student(2, "heyi2", (byte) 4);

        Teacher teacher = new Teacher(1, "heyi老师", (byte) 12);
        HashSet<Student> students = teacher.getStudents();
        students.add(heyi1);
        students.add(heyi2);
        heyi2.setTeacher(teacher);
        heyi1.setTeacher(teacher);
        print(teacher);


    }
    private static void print(Teacher t){
    
    
        System.out.println(t.getName());
        for (Student s: t.getStudents()) {
    
    
            System.out.println(s);
        }
    }
}

多对多

使用集合不仅可以表示一对一的关系,也可以表示多对多的关系。例如,一个学生可以选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系。

要完成上面要求,首先应该定义两个类,分别是学生信息(Student)类、课程信息(Course)类。在学生类中存在一个集合,保存全部的课程。同样,在课程类中也要存在一个集合,保存全部的学生。

定义学生类

package model.vo;

import java.util.HashSet;

public class Student {
    
    
    private Integer id;
    private String name;
    private byte age;
    private Teacher teacher;

    private HashSet<Course> allCourse = new HashSet<Course>();

    public HashSet<Course> getAllCourse() {
    
    
        return allCourse;
    }

    public void setAllCourse(HashSet<Course> allCourse) {
    
    
        this.allCourse = allCourse;
    }

    public Teacher getTeacher() {
    
    
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
    
    
        this.teacher = teacher;
    }

    public Student(Integer id, String name, byte age) {
    
    
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public byte getAge() {
    
    
        return age;
    }

    public void setAge(byte age) {
    
    
        this.age = age;
    }

    @Override
    public String toString() {
    
    
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +'}';
    }
}

定义课程类

package model.vo;

import java.util.HashSet;

public class Course {
    
    
    private int id;
    //课程名称
    private String name;
    private HashSet<Student> allStudents = new HashSet<>();

    public Course(int id, String name) {
    
    
        this.id = id;
        this.name = name;
    }

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public HashSet<Student> getAllStudents() {
    
    
        return allStudents;
    }

    public void setAllStudents(HashSet<Student> allStudents) {
    
    
        this.allStudents = allStudents;
    }

    @Override
    public String toString() {
    
    
        return "Course{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

逻辑关系

import model.vo.Course;
import model.vo.Student;
import model.vo.Teacher;

public class ManyToManyDemo {
    
    
    public static void main(String[] args) {
    
    
        Course c1 = new Course(3, "英语");
// 实例化课程对象
        Course c2 = new Course(5, "计算机");
        // 实例化课程对象
        Student s1 = new Student(1, "张三", (byte) 20);
// 实例化学生对象
        Student s2 = new Student(2, "李四", (byte) 21);
        Student s3 = new Student(3, "王五", (byte) 22);
        // 向课程增加学生信息
        c1.getAllStudents().add(s1);
        c1.getAllStudents().add(s2);

        // 向学生信息增加课程
        s1.getAllCourse().add(c1);
        s1.getAllCourse().add(c2);

        coursePrint(c1);
        studentPrint(s1);
    }

    private static void coursePrint(Course course) {
    
    
        System.out.println(course.getName());
        for (Student s : course.getAllStudents()) {
    
    
            System.out.println(s);
        }
    }

    private static void studentPrint(Student student) {
    
    
        System.out.println(student.getName());
        for (Course course : student.getAllCourse()) {
    
    
            System.out.println(course);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45178729/article/details/129075471
今日推荐