一:众所周知,实体之间的对应关系一般分为四种
- 一对一
- 一对多
- 多对一
- 多对多
今天主要学习了两种(一对多)和(多对一) 此处用学生和学生的年级两个人表来举例
(多对一):多个学生隶属于一个年级
//学生表的实体类
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("学生编号\t学生姓名\t年纪名称");
for (Student stu:students2){ //遍历集合中的数据
System.out.println(stu.getStudentNo()+"\t\t"+stu.getStudentName()+"\t\t"+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("学生编号\t学生姓名\t年纪名称");
for (Student stu:grade.getStudents()){ //遍历Grade对象中的集合,从而拿到该年级下的所有学生
System.out.println(stu.getStudentNo()+"\t\t"+stu.getStudentName()+"\t\t"+ grade.getGradeName());
}
一对一以及多对多的实现类的创建和上面基本上类似,