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