HibernateORMHibernateORM最佳实践第2章对象关系映射HibernateORM2回顾介绍应用程序分层体系结构ORM技术背景(数据库操作、持久化、JDBC比较及ORM工具)Hibernate的环境配置及入门程序编写HibernateORM3目标了解Hibernate的对象标识符学习Hibernate的主键生成机制掌握Hibernate的映射类型掌握对象继承关系映射掌握关联关系映射HibernateORM4对象标识符Hibernate使用OID(ObjectIdentifier)来标识对象的唯一性,它是关系数据库中主键在Java对象模型中的等价物三个不同的OIDHibernate能够识别三个不同的primaryKeyHibernate根据对象标识符来维持Java对象和数据库表中记录的对应关系问题数据库表中每条记录PK值不同的,但是在Java中靠对象的内存地址来识别的?HibernateORM5重写对象equals和hashCode方法Students1=newStudent(100,”TOM”,22);Students2=newStudent(100,“TOM”,22);Students3=s1;System.out.println(s1==s2);System.out.println(s1==s3);falsetrue重写equals()与hashCode()方法,不仅比较对象的地址,同时比较对象的具体内容Hibernate区分对象实体,是与数据库记录一致的。HibernateORM6Hibernate对主键分类两种分类:①单个主键、复合主键②自然(业务)主键、代理(逻辑)主键Hibernate内置对象标识符生成策略HibernateORM7主键映射单个主键映射复合主键映射
……把组成主键的属性组成一个类.HibernateORM8示例在映射表中:、HibernateORM9Hibernate的映射类型Hibernate连接Java对象和数据库表,在映射表里,使用及其他属性标签时,type属性既不是Java数据类型,也不是SQL数据类型,而是使用Hibernate的映射类型映射类型分为:基本映射类型和自定义映射类型如果在映射文件中没有指定映射的数据类型,Hibernate通过反射机制查找属性所在类的类型。HibernateORM10继承关系映射Hibernate提供3种继承持久化策略:①每个子类一张表②每个类一张表③共享一个数据表Studentsid:Longsname:StringUndergraduatetutor:StringGraduategtime:dateHibernateORM11每个子类一个数据表将父类属性分别加入到子类中去,分别对子类设计映射文件,针对子类对象进行操作,不能使用多态进行ORM操作。UndergraduateGraduatesid:Longsname:Stringtutor:Stringsid:Long(PK)sname:Stringgtime:dateTable:undergraduateTable:graduate①设计所映射表②设计映射表:Undergraduate.hbm.xml、Graduate.hbm.xml类(PK)HibernateORM12每个类一个数据表在父类映射表中利用标签定义其子类的映射StudentUndergraduateGraduatesid:Long(PK)sname:Stringusid:Long(PK)tutor:Stringgsid:Long(PK)gtime:dateHibernateORM13示例下面代码展示子类对象的持久化操作可由父类对象来完成!HibernateORM14代码HibernateORM15共享一个数据表只定义一个父类表,在父表中包括子类属性对应的字段,同时增加一个区分子类类型的字段。在父类映射表中,定义标签来描述区分子类类型的字段,标签定义子类的映射。HibernateORM16示例下面代码展示子类对象的持久化操作可由父类对象来完成!HibernateORM17代码HibernateORM18HibernateORM19关联关系映射使一个类知道另一个类的存在,表现在数据库中,通常用一个外键字段关联到另一张表。关联关系是有方向的,可以是单向,或双向的。Hibernate提供下列检索策略:①一对一关联②一对多、多对一关联③多对多关联④组件映射HibernateORM20关系映射(一)多对一关系/一对多关系它们是相对的关系,在关系映射表中使用标签或来映射关系.班级-学生关系tunittid(PK)tnametstudentsid(PK)snameunit_id(FK)(单向关联)HibernateORM21代码关联HibernateORM22映射文件HibernateORM23代码HibernateORM24配置HibernateORM25问题①如Tstudent.hbm....