实体之间的对应关系

一:众所周知,实体之间的对应关系一般分为四种

  1. 一对一
  2. 一对多
  3. 多对一
  4. 多对多

今天主要学习了两种(一对多)和(多对一) 此处用学生和学生的年级两个人表来举例

(多对一):多个学生隶属于一个年级 

//学生表的实体类
1 public class Student implements Serializable {  
2     private static final long serialVersionUID=2070056025956126480L;
3   private int StudentNo;
4   private String StudentName;
5   private Grade grade;  //年级表的实体类对象    多对一的关系,这里就声明一个单一的对象
6 }

//年级表的实体类

 public class Grade {
     private int gradeId;
     private  String gradeName;
    private   List<Student> students;    //学生表的实体类对象,一对多的关系,因为一个年级有许多个学生,所以用泛型集合来保存数据
}

//比如我们要查询所有学生记录,其中要包含学生的年级年级名称


public
List<Student> SelectGrade() { String sql="Select StudentNo,studentName,GradeName from Student inner join Grade on Student.GradeId=Grade.GradeID"; ResultSet resultSet = selectALL(sql); //BaseDao类的查询方法     try{ while(resultSet.next()){ //遍历resultSet里面的数据 Student student=new Student(); Grade grade=new Grade(); //创建年级实体类的对象 grade.setGradeName(resultSet.getString("GradeName")); //给年级类对象的年级名称赋值 student.setGrade(grade);    //将grade赋值给Student类的grade student.setStudentNo(resultSet.getInt("StudentNo")); student.setStudentName(resultSet.getString("StudentName")); studentList.add(student);    //把student对象添加到集合当中 } }catch (Exception e){ e.printStackTrace(); } return studentList; }

//测试类
List<Student> students2 = gradeService.selectGrade(); //调用查询方法,获取返回的泛型集合
System.out.println("学生编号 学生姓名 年纪名称");
for (Student stu:students2){                //遍历集合中的数据
System.out.println(stu.getStudentNo()+" "+stu.getStudentName()+" "+stu.getGrade().getGradeName());
}


//查询S1年级下的学生记录

 1  public Grade SelectS1Student() {
 2         String sql="SELECT StudentNo,studentName,GradeName FROM Student INNER JOIN Grade ON Student.GradeId=Grade.GradeID " +
 3                 "WHERE GradeName='S1')";
 4         ResultSet resultSet = selectALL(sql);
 5         List<Student> studentList=new ArrayList<>();
 6         Grade grade=new Grade();     //创建一个Grade对象,一个对象为一个年级
 7         try{
 8             while (resultSet.next()){
 9                 Student student=new Student();    //循环创建多个学生对象,一个对象代表一个学生
10                 student.setStudentName(resultSet.getString("studentName"));
11                 student.setStudentNo(resultSet.getInt("studentNo"));
12                 grade.setGradeName(resultSet.getString("GradeName"));
13                 studentList.add(student);      //将学生对象添加到集合中
14 
15             } 
16             grade.setStudents(studentList);      //给Grade类的对象赋值
17       
18         }catch (Exception e){
19             e.printStackTrace();
20 
21         }
22 
23         return grade;
24     }

//测试类
Grade grade = gradeService.SelectS1Student();   //返回一个Grade对象
System.out.println("学生编号 学生姓名 年纪名称");  
for (Student stu:grade.getStudents()){ //遍历Grade对象中的集合,从而拿到该年级下的所有学生
System.out.println(stu.getStudentNo()+" "+stu.getStudentName()+" "+ grade.getGradeName());
}


一对一以及多对多的实现类的创建和上面基本上类似,

原文地址:https://www.cnblogs.com/yjc1605961523/p/10943972.html