准备
一对多关系
需求:通过ID,查询学生信息,然后通过学生查询对应的成绩信息--实体类
@Entity
@Table(name="tb_student")
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="student_id")
private int studentId;
@Column(name="student_name")
private String studentName;
@Column(name="student_pwd")
private String studentPwd;
//建立学生与成绩的关系,一个学生可以有多门成绩,一门成绩只能属于一个学生,一对多的关系。
//一个学生可以有多成绩,所以我们需要使用集合来储存成绩
@OneToMany
//不管是什么关系,必须要指定关联关系的外键
@JoinColumn(name = "student_id")
private List<Result> results;
//补全get/set方法
}
–测试代码
//需求:通过ID,查询学生信息,然后通过学生查询对应的成绩信息
@Test
public void findById(){
//第一步:获得操作对象
EntityManager entityManager = JpaUtils.getEntityManager();
//第二步:操作-查询
//查询学习信息
Student student = entityManager.find(Student.class, 1);
System.out.println("学生名:"+student.getStudentName());
//通过学生的信息找到成绩信息
List<Result> results = student.getResults();
for (Result result : results) {
System.out.println("科目:"+result.getResultSubject()+",成绩:"+result.getResultScore());
}
//第三步:提交关闭
entityManager.close();
}
多对一关系
需求:通过ID,查询成绩信息,然后通过成绩查询对应的学生信息–实体类
@Entity
@Table(name="tb_result")
public class Result implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="result_id")
private int resultId;
@Column(name="result_score")
private float resultScore;
@Column(name="result_subject")
private String resultSubject;
//成绩与学生是多对一的关系。意味着一条成绩只能对应一个学生。
@ManyToOne
@JoinColumn(name = "student_id")
private Student student;
//补全get、set方法
}
–测试代码
//需求:通过ID,查询成绩信息,然后通过成绩查询对应的学生信息
@Test
public void findById(){
//第一步:获得操作对象
EntityManager entityManager = JpaUtils.getEntityManager();
//第二步:操作-查询
//查询学习信息
Result result = entityManager.find(Result.class, 1);
System.out.println("科目:"+result.getResultSubject()+",分数:"+result.getResultScore());
//通过成绩查询学生
System.out.println("学生名:"+result.getStudent().getStudentName());
//第三步:提交关闭
entityManager.close();
}
一对一关系
需求:通过ID查询学生身份信息,在通过学生身份查询学生信息--学生身份实体类
@Entity
@Table(name="tb_student_identifer")
public class StudentIdentifer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="student_id")
private int studentId;
@Column(name="student_idcard")
private String studentIdcard;
@Column(name="student_number")
private String studentNumber;
//配置学生身份与学生的而关系,一对一
@OneToOne
@JoinColumn(name = "student_id")
private Student student;
//补全Get、Set代码
}
–测试代码
@Test
public void findStudentIdentiferAndStudent(){
//查询身份
EntityManager manager = JpaUtils.getEntityManager();
StudentIdentifer identifer = manager.find(StudentIdentifer.class, 1);
System.out.println("身份证:"+identifer.getStudentIdcard()+",学生名:"+identifer.getStudent().getStudentName());
}
多对多关系
需求:通过ID,查询学生信息,然后通过学生查询对应教师信息--Student实体类,增加以下代码
//多对多的三个条件,中间表示谁,本表外键示谁,关联表外键示谁
//JoinTable注解:用于配置多对多关系的
//name属性,用于配置中间表的表名
//joinColumns属性,用于配置当前实体类对应中间表的外键名
//inverseJoinColumns属性:用于配置关联表对应中间表的外键名
@ManyToMany
@JoinTable(name = "tb_student_teacher",joinColumns = @JoinColumn(name = "student_id"),inverseJoinColumns = @JoinColumn(name = "teacher_id"))
private List<Teacher> teachers;
public List<Teacher> getTeachers() {
return teachers;
}
–测试代码
//需求:通过ID,查询学生信息,然后通过学生查询对应教师信息
@Test
public void findStudentAndTeacher(){
//第一步:获得操作对象
EntityManager entityManager = JpaUtils.getEntityManager();
//第二步:操作-查询
//查询学习信息
Student student = entityManager.find(Student.class, 1);
System.out.println("学生名:"+student.getStudentName());
List<Teacher> teachers = student.getTeachers();
for (Teacher teacher : teachers) {
System.out.println("教师名:"+teacher.getTeacherName());
}
//第三步:提交关闭
entityManager.close();
}
2303

被折叠的 条评论
为什么被折叠?



