利用Hibernate实现O/RMapping技术(HibernateforO/RMapping)杨少波njtuyang@gmail.com在本讲您能了解如下知识点(TheEmphasesinTeachingMaterials)Hibernate框架技术及应用为什么要使用Hibernate框架Hibernate框架主要的技术特性Hibernate框架的应用场合Hibernate框架系统架构Hibernate框架中的主要API利用Hibernate实现O/RMapping技术Hibernate框架技术及应用1、有关与Hibernate有关的一些基本概念(1)Hibernate技术本质上是一个提供数据访问服务的中间件Hibernate框架是一个面向Java环境的对象/关系数据库映射工具,它实现把Java类对应到数据库表中,并且采用了xml技术、JavaReflection技术等。Hibernate不仅提供了从Java类到数据表的映射,也还提供了对数据库查询和恢复等方面的机制支持。从而可以大幅度地减少开发时人工使用SQL和JDBCAPI处理数据的时间。(2)Hibernate是一个开放源代码的对象关系映射框架它对JDBC进行了非常轻量级的对象封装,从而使用面向对象编程思维(OOP)来操纵关系型的数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在J2SE的应用程序中使用,也可以在J2EEWeb应用系统中使用它。面向开发人员简化开发过程2、为什么要应用Hibernate技术----对设计人员而言对设计人员达到持久层设计上的解耦,解耦合设计的目标(1)达到业务逻辑与数据逻辑相分离(业务人员不需要考虑数据表的逻辑结构)(2)达到数据访问逻辑与物理数据库的结构相分离(数据访问逻辑的开发者不再关心不同的物理数据库的差异性)注意:从设计上来讲,hibernate通过对集合、继承的支持,使开发人员能够建立一个关系足够“复杂”的对象模型。面向设计人员达到“解耦”设计目标3、为什么要应用Hibernate框架----对开发人员而言(1)提高了编码的效率Hibernate是一个ORM工具,它不仅仅是实现了数据库访问性能优化和与数据库交互的常用操作(CRUD)还将数据表与对象进行了映射关联(O/RMapping),让开发人员可以脱离数据库系统,而直接针对对象来与数据库表进行交互。(2)提高了数据库访问的性能开发人员可以不再需要考虑与数据库交互的性能问题,如连接池、数据缓存等等----因为Hibernate提供了对这些方面的功能实现:数据读取和更新、事务管理、数据连接池、查询和实体关系管理等。(3)Hibernate使设计和开发人员达到下面的效果对设计人员达到持久层设计上的解耦对开发人员达到简化持久层的编程实现您写过这样的SQL语句吗4、为什么要提出Hibernate(1)Hibernate是JDBC的轻量级的对象封装做为JDBC的替代者出现的---不仅提供ORM映射服务,还提供数据查询和数据缓存功能(2)优化EJB中的CMBEntityBean当然EJB具有分布式的特性,而Hibernate则不具备简化JDBC和优化EJB当然只能是优化而不是代替(3)轻量级的对象封装的具体体现对JDBC的数据访问操作简化:以面向对象的编程形式实现对数据库表中数据CRUD操作---避免复杂的SQL语句出现。对JDBC的功能扩展:采用面向对象中的对象之间的关系如“关联、继承、聚合和组合”等形式来解决数据库表之间存在一定的关系的数据访问(O/RMapping技术)。对JDBC的数据访问性能改进:提供了事务管理,多种形式的缓存管理技术,数据并发控制技术等方面。5、Hibernate和JDBC在性能上的对比(1)用hibernate开发的系统能提高开发效率和系统的可重用性等方面因为任何封装在JDBC之上的东西都不可能有直接去写JDBC快(不考虑cache)。但通过适当的封装,这样能够降低开发的复杂性,提高开发效率和使代码易于维护。因此我们应用了hibernate后系统的速度可能会有影响!(2)能够真正实现面向对象的建模用Hibernate时最大的便利不是在写代码的时候用对象的操作代替SQL语句,而是在建模的时候可以用面向对象的思维把很复杂的逻辑用UML图表示出来,然后直接转化成实体。(3)JDBC+Hibernate相互结合我们应该在性能影响太大的地方采用面向对象和关系相结合的方式。这是一种比较合理的设计!我们家中购买了汽车后,也应该还要保留我们原来的自行车!6、如何为应用系统提供统一的一致的数据库访问操作(1)JDBC技术:它是一套API而不是一个框架。(2)使用Hibernate框架访问数据库的原理(3)Hibernate与JDBC的主要区别Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层Hibernate是做为JDBC的替代者出现的,不能用来直接和EJB中的EntityBean做对比----不是代替EJB而是优化EJB,在轻量级的容器中也能够应用O/RMapping技术。希望您能够明确这点!框架,Hibernate可以用在任何JDBC可以使用的场合,从某种意义上来说,Hibernate在任何场合下取代JDBC。(4)Hibernate的一些弱点主要体现在比如对象关系的映射配置过多,控制复杂;事务处理也面临各种兼容问题;一个持久性类不能映射到多个不同的数据库表Hibernate内置映射类型复杂化ID规定化生成:Hibernate中内置标识符生成器给表单ID自动生成提供了方便,但却不能自定义各种ID形式。另外不支持动态映射数据库表7、什么时候要应用Hibernate(1)开发团队中没有数据持久层的开发能力由于hibernate为我们提供了一套成熟的O/RMapping的模型,应用它将能够在短时间内构建适合业务需求的数据持久层的解决方案。比如在数据缓存、连接池管理、多数据库、分布式事务等的支持等等方面,hibernate在上述方面有比较出色的表现。我们不只是CRUD,还有许多其它的要求!我们的开发人员不能很好地把握JDBC在不同的物理数据库方面的差异性!(2)对JDBC底层开发不甚熟悉者由于Hibernate实现了对JDBC底层的调用封装,这样将能够统一对不同类型的数据库系统的支持。因此,当开发者在缺乏对JDBC底层调用的了解时,使用Hibernate框架则可以达到事半功倍的效果。(3)在团队开发中希望能够统一持久层开发平台可以统一团队的开发过程,从而减少沟通的频率,同时也能够促进协同开发和数据共享。团队有共同的目标和平台!(4)希望我们的应用系统不依赖于某种特定的数据库这一般特别适用于产品类型的软件系统中,但在开发中要遵守一定的规则。这可能是我们选择Hibernate的一个主要的考虑!尽量使用标准通用的SQL语句尽量不使用各数据库方言和某种数据库特有的函数或者数据类型等将系统的配置参数保存在一个properties文件或者*.xml中,然后在代码中利用类似Configuration.setProperties(Propertiespro)方法载入配置参数文件。8、Hibernate系统(冬眠)(1)Hibernate的设计者GavinKingGavinKing是Hibernate的作者,EJB3.0专家委员会成员,JBoss核心成员之一。Hibernate诞生在2001年11月。(2)下载其系统hibernate是sourceforge的一个子项目,可以从Hibernate的网站或者上面获得下载的连接。(3)其系统架构Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。Hibernate是Java应用和关系数据库之间的桥梁,它负责Java对象和关系数据之间的映射。(4)它是“轻型”的体系结构方案从而允许应用系统中的持久类是一种普通的JavaBean(JOPO),因此系统本身的核心类不必依赖于Hibernate的API。当然,应用系统本身也可以自己直接提供JDBC数据库连接,并且自行管理事务。您了解“轻量级”的含义和要求吗?(5)当然它也可以是一个“全面解决”的体系结构方案它将应用系统从底层的JDBC/JTA/JNDI等方面的API中抽象出来,而让Hibernate来处理这些技术实现的细节。从而可以使我们的应用系统能够屏蔽对各个物理数据库系统的差别9、HibernateAPI中包含的一些主要的类希望重点掌握这些接口的用法!所应该注意的是:由于在Hibernate中使用了J2EE架构中的如下技术:JDBC、JTA、JNDI。其中JDBC是一个支持关系数据库操作的一个基础层;它与JNDI和JTA一起结合,使得Hibernate可以方便地集成到J2EE应用服务器中去。10、Hibernate系统可以运行在两种环境下Hibernate可以与任何一种Java应用的运行环境集成,Java应用的运行环境可分为两种:受管理环境(Managedenvironment)和不受管理环境(Non-managedenviroment)。(1)受管理环境――应用系统的整个执行过程在容器的控制之下(2)不受管理环境――应用系统的整个执行过程不在容器的控制之下(3)Hibernate允许Java应用在不同的环境中移植当Java应用从一个环境移植到另一个环境中时,只需要修改Hibernate的配置文件而不需要修改或者只需要修改极少量的Java源代码。如从“受管理环境〈---〉不受管理环境”、在“不同的物理数据库”之间转换只有这样,我们的系统才能“适应变化”和“满足变化”!1、子曰:“学而不思则罔,思而不学则殆。”“学而时习之”2、子曰:“知之者不如好之者,好之者不如乐之者”3、子曰:“三人行,必有我师焉”4、子曰:“我非生而知之者,好古,敏以求之者也”本讲的简要回顾5、师者:“传道、授业和解惑”