1、Struts2+Hibernate+SpringJavaEE 企业级项目开发单元四 人事管理任务3 部门信息管理1任务简介任务简介2任务分析任务分析3相关支撑知识相关支撑知识4任务小结任务小结目录页第1页任务3 部门信息管理过渡页第2页过渡页任务简介任务3 部门信息管理任务简介本任务的目标是学习Hibernate的数据关联的配置,本任务p 一对一关联p 一对多关联p 多对多关联p 应用数据关联配置,实现部门信息管理第3页过渡页第4页过渡页任务分析任务3 部门信息管理任务分析p 数据库中实体的关联关系有三种:一对一,一对多和多对多p 在Hibernate在映射文件中配置关联关系,非常的灵活p H
2、ibernate中关联关系主要在*.hbm.xml中进行配置p 部门信息管理包括添加部门、删除部门第5页过渡页第6页过渡页相关支撑知识相关支撑知识p 一对一关联指两个对象之间是一对一的关系,Hibernate中有两种映射一对一关联关系的实现方式:共享主键是限制两个数据表的主键使用相同的值,通过主键形成一对一映射关系;惟一外键是一个表的外键和另一个表的惟一主键对应形成一对一映射关系。第7页一对一关联1 1一数据关联任务3 部门信息管理相关支撑知识第8页一对一关联1 1任务3 部门信息管理一数据关联 一对一共享主键实例一对一共享主键实例:一个班级对应一个班长一个班级对应一个班长/定义实体类StuC
3、lass.javapublic class StuClass implements Serializableprivate int id;private String name;/表示班级的班长 private StuLeader leader;./一组set/get属性方法 /定义实体类StuLeader.javapublic class StuLeader private int id;private String name;private StuClass stuClass;./一组set/get属性方法实体类实体类相关支撑知识第9页一对一关联1 1任务3 部门信息管理一数据关联 一对一
4、共享主键实例一对一共享主键实例:一个班级对应一个班长一个班级对应一个班长StuClass.hbm.xml的配置代码如下:的配置代码如下:StuLeader.hbm.xml的配置代码如下:的配置代码如下:实体映射文件实体映射文件相关支撑知识第10页一对一关联1 1任务3 部门信息管理一数据关联 一对一共享主键实例一对一共享主键实例:一个班级对应一个班长一个班级对应一个班长public class OneToOoneTest public static void main(String args)Session session=HibernateSessionFactory.getSession(
5、);Transaction transaction=session.beginTransaction();StuClass sc=(StuClass)session.get(StuClass.class,1);StuLeader sl=(StuLeader)session.get(StuLeader.class,1);mit();System.out.println(sc.getName()+sl.getLeaderName();测试类测试类相关支撑知识p 一对多关系很常见,例如班级与学生、部门与员工等的关系就是常见的一对多关系p 一对多关联映射主要使用及来实现映射配置第11页一对多关联2 2
6、一数据关联任务3 部门信息管理相关支撑知识第12页一对多关联2 2任务3 部门信息管理一数据关联 一对多实例一对多实例:一个班级对应多个学生一个班级对应多个学生/定义实体类StuClass.javapublic class StuClass implements Serializableprivate int id;private String name;private int num;/一个班级可能会有多个学生private Set students=new HashSet();/一组set/get属性方法/定义实体类Student.javapublic class Student priv
7、ate int id;private String stuId;private String stuname;/一个学生只属于一个班级private StuClass stuclass;/一组set/get属性方法实体类实体类相关支撑知识第13页一对多关联2 2任务3 部门信息管理一数据关联 一对多实例一对多实例:一个班级对应多个学生一个班级对应多个学生StuClass.hbm.xml的代码的代码 Student.hbm.xml的代码的代码 实体映射实体映射文件文件相关支撑知识第14页一对多关联2 2任务3 部门信息管理一数据关联 一对多实例一对多实例:一个班级对应多个学生一个班级对应多个学生
8、public class OneToManyTest public static void main(String args)Session session=HibernateSessionFactory.getSession();Transaction transaction=session.beginTransaction();StuClass stuclass=new StuClass();stuclass.setName(软件121);stuclass.setNum(30);Student stu1=new Student();stu1.setStuId(1108203311);stu
9、1.setStuname(王五);stu1.setStuclass(stuclass);Student stu2=new Student();stu2.setStuId(1108203312);stu2.setStuname(张红);stu2.setStuclass(stuclass);session.save(stu1);session.save(stu2);mit();测试类测试类相关支撑知识p 两个表的多对多关系,需要借助第三个连接表来实现,否则就会出现冗余,在查询结果中就会遇到这种情况。p 多对多关系在日常应用中比较普遍,如学生和课程、学生和老师、商品和分类等之间的关系。第15页多对多
10、关联3 3一数据关联任务3 部门信息管理相关支撑知识第16页多对多关联3 3任务3 部门信息管理一数据关联 多对多实例多对多实例:多个学生对应多个老师多个学生对应多个老师/定义实体类Student.javapublic class Student private int id;private String stuId;private String stuname;/一个学生只属于一个班级private StuClass stuclass;/一个学生可能有多个老师private Set teachers=new HashSet();/一组set/get属性方法 /定义教师类Teacher.jav
11、apublic class Teacher private int id;private String teachId;private String teacherName;/一个老师可教授多个学生private Set students=new HashSet();/一组set/get属性方法实体类实体类相关支撑知识第17页多对多关联3 3任务3 部门信息管理一数据关联 多对多实例多对多实例:多个学生对应多个老师多个学生对应多个老师Student的映射文件Student.hbm.xml .Teacher的映射文件Teacher.hbm.xml .实体映射实体映射文件文件相关支撑知识第18页多
12、对多关联3 3任务3 部门信息管理一数据关联 多对多实例多对多实例:多个学生对应多个老师多个学生对应多个老师public class ManyToManyTest public static void main(String args)Session session=HibernateSessionFactory.getSession();Transaction transaction=session.beginTransaction();StuClass stuclass=(StuClass)session.get(StuClass.class,1);System.out.println(s
13、tuclass.getName();Student stu1=new Student();stu1.setStuId(1308201101);stu1.setStuname(张三);stu1.setStuclass(stuclass);Teacher teach1=new Teacher();teach1.setTeacherName(邓小志);teach1.setTeachId(J00001);Set teachs=new HashSet();teachs.add(teach1);stu1.setTeachers(teachs);session.save(stu1);mit();测试类测试类过渡页第19页过渡页任务小结任务小结能力目标第20页1一对一关联2一对多关联任务3 部门信息管理3多对多关联谢谢观看