跟我学Hibernate框架技术——在容器外实现Hibernate框架继承映射关系(第1部分)_第1页
跟我学Hibernate框架技术——在容器外实现Hibernate框架继承映射关系(第1部分)_第2页
跟我学Hibernate框架技术——在容器外实现Hibernate框架继承映射关系(第1部分)_第3页
跟我学Hibernate框架技术——在容器外实现Hibernate框架继承映射关系(第1部分)_第4页
跟我学Hibernate框架技术——在容器外实现Hibernate框架继承映射关系(第1部分)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料目 录1.1在容器外实现hibernate框架继承映射关系及实例(第1部分)21.1.1继承关系的映射实现方式一21.1.2继承关系的映射实现方式一的具体实现31.1.3为每个数据库表建立映射文件151.1 在容器外实现hibernate框架继承映射关系及实例(第1部分)1.1.1 继承关系的映射实现方式一1、为什么要应用继承关系设计各个po类由于“学生”和“老师”都包含有共性的“属性”,为了减少po类中的重复,需要应用继承设计方案。abstractperson类以及其两个子类student类和teacher类。2、为什么要应用“第一种实

2、现方式”由于数据库表是满足“第一种实现方式”的要求,因此采用“第一种实现方式”。3、遵守“第一种实现方式”的要求每个具体子类映射成单个数据库表,而抽象基类不参与映射,每个具体类一张表。1.1.2 继承关系的映射实现方式一的具体实现1、在项目中设计各个持久化(1)departmentpo类,包名称为com.px1987.sshwebcrm.dao.pobject提供两个成员属性,并为它们提供get/set方法private int id;private string depname;private string depdescriptor;最后的代码如下package com.px1987.ss

3、hwebcrm.dao.pobject;public class departmentpo private int id;overridepublic int hashcode() final int prime = 31;int result = 1;result = prime * result+ (depdescriptor = null) ? 0 : depdescriptor.hashcode();result = prime * result + (depname = null) ? 0 : depname.hashcode();result = prime * result +

4、id;return result;overridepublic boolean equals(object obj) if (this = obj)return true;if (obj = null)return false;if (getclass() != obj.getclass()return false;departmentpo other = (departmentpo) obj;if (depdescriptor = null) if (other.depdescriptor != null)return false; else if (!depdescriptor.equal

5、s(other.depdescriptor)return false;if (depname = null) if (other.depname != null)return false; else if (!depname.equals(other.depname)return false;if (id != other.id)return false;return true;public int getid() return id;public void setid(int id) this.id = id;public string getdepname() return depname

6、;public void setdepname(string depname) this.depname = depname;public string getdepdescriptor() return depdescriptor;public void setdepdescriptor(string depdescriptor) this.depdescriptor = depdescriptor;private string depname;private string depdescriptor;public departmentpo() (2)abstractpersonpo类,包名

7、称为com.px1987.sshwebcrm.dao.pobject在其中提供两个成员属性,并为它们提供get/set方法private int id;private string personname;private departmentpo department; /由于abstractperson类与departmentpo类存在“一对一”的关系最后的代码如下:package com.px1987.sshwebcrm.dao.pobject;public abstract class abstractpersonpo private int id;overridepublic int h

8、ashcode() final int prime = 31;int result = 1;result = prime * result+ (department = null) ? 0 : department.hashcode();result = prime * result + id;result = prime * result+ (personname = null) ? 0 : personname.hashcode();return result;overridepublic boolean equals(object obj) if (this = obj)return t

9、rue;if (obj = null)return false;if (getclass() != obj.getclass()return false;abstractpersonpo other = (abstractpersonpo) obj;if (department = null) if (other.department != null)return false; else if (!department.equals(other.department)return false;if (id != other.id)return false;if (personname = nu

10、ll) if (other.personname != null)return false; else if (!personname.equals(other.personname)return false;return true;public int getid() return id;public void setid(int id) this.id = id;public string getpersonname() return personname;public void setpersonname(string personname) this.personname = pers

11、onname;public departmentpo getdepartment() return department;public void setdepartment(departmentpo department) this.department = department;public abstract void workstudy(string content); /由于abstractperson类为抽象类private string personname;private departmentpo department; /由于abstractperson类与department类

12、存在“一对一”的关系public abstractpersonpo() (3)studentpo类,包名称为com.px1987.sshwebcrm.dao.pobject、选择基类为com.px1987.sshwebcrm.dao.pobject.abstractpersonpo在该类中定义出下面的成员属性,并提供get/set方法private int studentlevel;private string studentmajor;编程该类中的方法package com.px1987.sshwebcrm.dao.pobject;public class studentpo extends

13、 abstractpersonpo private int studentlevel;overridepublic int hashcode() final int prime = 31;int result = super.hashcode();result = prime * result + studentlevel;result = prime * result+ (studentmajor = null) ? 0 : studentmajor.hashcode();return result;overridepublic boolean equals(object obj) if (

14、this = obj)return true;if (!super.equals(obj)return false;if (getclass() != obj.getclass()return false;studentpo other = (studentpo) obj;if (studentlevel != other.studentlevel)return false;if (studentmajor = null) if (other.studentmajor != null)return false; else if (!studentmajor.equals(other.stude

15、ntmajor)return false;return true;public int getstudentlevel() return studentlevel;public void setstudentlevel(int studentlevel) this.studentlevel = studentlevel;public string getstudentmajor() return studentmajor;public void setstudentmajor(string studentmajor) this.studentmajor = studentmajor;priva

16、te string studentmajor;public studentpo() overridepublic void workstudy(string content) (4)teacherpo类,包名称为com.px1987.sshwebcrm.dao.pobject,继承com.px1987.sshwebcrm.dao.pobject.abstractpersonpo在该类中定义出下面的成员属性,并提供get/set方法private float monthsalary;private string coursename;编程该类中的方法package com.px1987.sshw

17、ebcrm.dao.pobject;public class teacherpo extends abstractpersonpo private float monthsalary;overridepublic int hashcode() final int prime = 31;int result = super.hashcode();result = prime * result+ (coursename = null) ? 0 : coursename.hashcode();result = prime * result + float.floattointbits(monthsa

18、lary);return result;overridepublic boolean equals(object obj) if (this = obj)return true;if (!super.equals(obj)return false;if (getclass() != obj.getclass()return false;teacherpo other = (teacherpo) obj;if (coursename = null) if (other.coursename != null)return false; else if (!coursename.equals(oth

19、er.coursename)return false;if (float.floattointbits(monthsalary) != float.floattointbits(other.monthsalary)return false;return true;public float getmonthsalary() return monthsalary;public void setmonthsalary(float monthsalary) this.monthsalary = monthsalary;public string getcoursename() return cours

20、ename;public void setcoursename(string coursename) this.coursename = coursename;private string coursename;public teacherpo() / todo auto-generated constructor stuboverridepublic void workstudy(string content) 1.1.3 为每个数据库表建立映射文件1、明确对数据库表设计的要求首先要明确为什么要采用第一种方式、该方式的条件对数据库表设计的要求由于本项目中的数据库表满足hibernate中的第

21、一种继承方案。2、各个映射文件之间的关系department类、student类和teacher类都有相应的映射文件,而abstractperson类由于是抽象类并且不参与映射,因此不需要相应的映射文件。下图显示了持久化类、映射文件和数据库表之间的对应关系。department类student类abstractperson类teacher类department.hbm.xmlstudent.hbm.xmlteacher.hbm.xmldepartment表student表teacher表注意:如果abstractperson类不是抽象类,即abstractperson类本身也能被实例化,那么还需要为abstractperson类创建对应的abstractperson表,此时student表和teacher表的结构仍然和上面图中所示的一样。这意味着在abstractperson表、student表和teacher表中都定义了相同的personname字段以及参照department表的外键depid。另外,还需为abstractperson类创建单独的abstractperson.hbm.xml文件。3、 创建映射文件-departmentpo.hbm.xml(1) 新建departmentpo.hbm.xml文件(2)该文件的内容如下: 从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论