一对多

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

定义一个学生类

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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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);}}
}

java 一对多、多对多关系示例相关推荐

  1. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  2. Java一对多、多对多关系示例

    一对多 生活中常见一对多关系的例子,如一个学校可以包含多个学生,一个学生属于一个学校,那么这就是一个典型的一对多关系,可以通过集合进行关系的表示. 下面是基于集合应用的一个示例,这个示例将作为以后 J ...

  3. Java多对多关系示例

    使用集合不仅可以表示一对一的关系,也可以表示多对多的关系.例如,一个学生可以选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系. 要完成上面要求,首先应该定义两个类,分别是学生信息 ...

  4. Hibernate一对多/多对一关系映射详解及相应的增删查改操作

    以客户与订单的关系为例 1.在实体模型类中绑定两者关系: 客户类: public class Customer {private Integer id;//客户idprivate String nam ...

  5. 数据库外键:一对多/多对多关系

    数据库事务四大特性ACID: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 基于原子性对存在重复数据的表进行拆分 一对多 ...

  6. 数据库一对一 一对多 多对多关系

    参考:https://blog.csdn.net/u013144287/article/details/79024130 自己在项目中写的实例: '实体'和'公理'具有多对多关系,即一个实体可以对应多 ...

  7. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午--.也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用多向要看 ...

  8. 数据库多对多关系示例 - 使用sqlite演示

    多对多,可以理解为是一对多和多对一的组合:要实现多对多,一般都需要有一张中间表(也叫关联表),将两张表进行关联,形成多对多的形式: 例如:     老师表.班级表.课程表,中间表为:课程表: 如果sq ...

  9. java中的多对多关系解析_Java中多对多映射关系(转)

    多对对的映射,可以用学生和课程进行演示.一个学生可以选择多个课程,一个课程又对应了多个学生 定义学生类 class Stu{ private String name; private String n ...

最新文章

  1. git revert和git reset的区别
  2. 稀疏矩阵的压缩存储与转置
  3. js 中 setInterval 的返回值问题
  4. MFC中在picture control中显示图像的方法
  5. notepad++ vim插件_是时候摒弃掉Notepad++ ,因为你还有更多的选择...
  6. python middleware_Django 中间件
  7. java adt入门教程_【教程】【多图详解】如何在Eclipse中离线安装ADT(Android Development Tools)...
  8. vue连线 插件_一起写一个即插即用的 Vue Loading 插件
  9. 读取kaf卡数据_墨菊居然能秒开机秒读数据!Lexar雷克沙1667x UHS-II存储卡体验
  10. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
  11. 学习笔记:自己编译安装OpenCV+测试opencv安装是否成功
  12. 怎么把文本文档txt改成html,如何将Word文档转换成txt格式文本
  13. Python 基础 1加到100 求和
  14. js拖拽(二)仿iGoogle自定义首页模块拖拽
  15. Proteus和Keil两个软件的联合使用
  16. vue项目打包出错:Unexpected token arrow «=>», expected punc «,» [static/js/chunk-1558f5a0.b64bfa00.js:626,2
  17. python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算
  18. javascript利用iframe打印pdf文档失败的问题
  19. “我们为什么要录用你?”应聘者如何回答?
  20. 论文翻译:Semantics-Guided Neural Networks for Efficient Skeleton-Based Human Action Recognition

热门文章

  1. CityMaker学习教程07 示例代码的使用CSharp
  2. 爬虫学习经验分享-------某点评网站
  3. c语言函数指针 的定义方法,C语言 函数指针一(函数指针的定义)
  4. 3344avd_AVD生根
  5. Android 解决 adapter.notifyDataSetChanged() 不起作用
  6. 关于notifydatasetchange的一些理解
  7. 【读书笔记】数据化管理:洞悉零售及电子商务运营
  8. gstreamer教程(一)-基本概念
  9. plsql无法连接linux下的oracle服务器,提示:ora-12541:TNS 无监听程序
  10. matlab中surf出来要有颜色,matlab中surf什么意思