Hibernate应用探索

来源 :中国高新技术企业 | 被引量 : 0次 | 上传用户:xiao2168644
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:文章在面向对象程序设计中的数据持久化问题的背景下,分析了Hibernate的结构及运行机理,并将其与CMP做了对比,然后根据实际项目经验总结出实际开发中的一些实践准则,使初级开发者可以能够尽快地把握Hibernate的应用技巧,充分利用Hibernate的优点,提高开发效率,增强系统的稳定性、可移植性。
  关键字:面向对象;Hibernate;持久层;最佳实践
  中图分类号:TP312文献标识码:A文章编号:1009-2374(2009)02-0074-02
  
  OOP即面向对象的程序设计(Object-Oriented Programming),是目前占据主流地位的一种程序设计思想。在软件工程的各个阶段运用并体现面向对象的思想,已经成为软件分析、设计、开发的基本方法。但对象只能存在于内存中,而内存不能永久保存数据。如果要永远保存对象的状态,需要进行对象的持久化,即把对象存储到专门的数据存储中。
  关系数据库是目前数据持久化存储的主要形式。关系数据库系统中存放的是关系数据,是非面向对象的,其操作的特点是“集合性”的,因而关系数据本身是无法表现出对象之间存在的关联和继承关系。
  于是,在面向对象的软件设计中使用关系数据库做为数据的持久化方式,就必然需要进行对象-关系的映射(Object/Relation Mapping,简称ORM)。那么,如何能够以较低的代价在对象和关系模型之间相互转化,提高系统的开发效率就成了一个非常重要的问题。幸运的是ORM框架——Hibernate为人们解决了这一问题。越来越多的Java开发人员把Hibernate作为企业应用和关系数据库之间的中间件。使用Hibernate,开发者可以采用面向对象的方法操作数据库,提高工作效率[1]。
  
  一、Hibernate
  
  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP[2],完成数据持久化的重任。
   (一)Hibernate体系结构
  Hibernate体系结构如图一所示。可以看出,Hibernate是Java应用和关系数据库之间的桥梁,它将应用层对对象的操作通过XMLMapping转化为针对关系数据库特定操作,使程序员专注于业务逻辑的开发,而不用关心数据库的操作问题。Hibernate以hibernate.properties或hibernate.cfg.xml作为系统配置文件,并通过类映射文件(*.hbm.xml)将实体类映射到数据库中的表,为应用程序提供持久化服务[3]。
  


   (二)Hibernate的核心接口
  Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。下面对这五的核心接口分别加以介绍。
  Session接口负责执行被持久化对象的CRUD(Create,Retrieve,Update,Delete)操作。但需要注意的是Session对象是非线程安全的。
  SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。需要注意的是SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
  Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
  Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
  Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
  
  二、Hibernate与CMP的对比
  
  J2EE的标准是CMP Entity Bean,而实际应用中受到诟病最多的也是它。Hibernate至少比CMP2.0有以下优点:
  1.兼容性。EJB的规范是固定的,但是各个软件厂商的实现却是各不相同的,这样就造成学习了厂商A的EJB使用后,在使用厂商B的EJB组件时又要重新学习相关的使用手册,这样就势必造成资源的浪费。
  2.性能。Hibernate的操作是本地调用,CMP2.0虽然也有Local接口,但是Web层还是需要通过Remote接口访问EJB层的数据。那么序列化、网络调用等过程必将造成性能的下降。
  3.动态Query。Entity Bean很难实现动态Query,这是因为它基于代码自动生成技术,即最终的执行代码是在部署编译时生成的。而Hibernate则有根本的改变,它基于reflection机制,运行时动态Query是很自然的事。另外,Hibernate几乎支持所有的SQL语法,传统数据库可以做的它就可以做。
  4.发展速度。EJB是许多大的软件公司共同协商、制定的一套标准,其更新改进的速度远远无法与Hibernate相比。Hibernate的核心程序员只有一人,而且以开源的方式在全世界这个范围内发布,在大量的开发人员努力下不断地改进,它改进的速度是EJB无法相比的。
  
  三、最佳实践
  
  Hibernate是一个非常优秀的ORM框架,但这并不意味着它是万能的、自动的,就像好车还得要技术高超的司机来驾驶才能发挥出应有的性能一样。在实际使用中,用户需要深入了解应用的需求,并结合Hibernate的自身特点来进行准确而有效的设计。通过对许多项目的分析,笔者总结出一些实践准则如下:
  1.设计细颗粒度的持久类并且使用来实现映射。
  2.对持久类声明标识符属性(identifier properties),标识符应该是自动生成、不涉及业务含义。
  3.对所有的实体都标识出自然键,用进行映射。实现equals()和hashCode()。
  4.考虑把查询字符串放在程序外面,让程序具有更好的可移植性。
  5.在查询中使用命名参数。
  6.不要自己来管理JDBC connections。
  7.考虑使用用户自定义类型(custom type)。
  8.在性能瓶颈的地方使用硬编码的JDBC,但一定要确认这些操作直接使用JDBC会更好。
  9.理解Session清洗(flushing),避免过于频繁flushing。
  10.对于关联优先考虑lazy fetching,但要注意缓存限制。
  11.考虑把Hibernate代码从业务逻辑代码中抽象出来。
  12.不要用怪异的连接映射,偏爱双向关联,在大型应用中,几乎所有的关联必须在查询中可以双向导航。
  13.关于Map文件的生成,既可以在数据库设计完成后使用工具一次性的生成Mapping文件,也可以在软件的编码中嵌入数据说明,然后使用XDoclet[4]来自动生成Mapping文件。
  
  四、结语
  
  虽然Hibernate有这诸多的优点,但目前来看Hibernate也存在着缺点,比如:Hibernate提供了自动生成mapping文件的工具,但还需根据具体应用做必要的手工调整。总之,Hibernate虽然是一个优秀的工具,但是其效能的发挥是以开发人员对系统的理解为基础的,只有合理设计关系数据库,并根据应用中不同的性能需求做相应的设计,才能充分地发挥Hibernate的优点,简化持久层开发,提高系统的开发效率。
  
  参考文献
  [1]孙卫琴.精通Hibernate:Java对象持久化技术详解[M].北京:电子工业出版社,2005.
  [2]杨绍方.深入掌握J2EE编程技术[M].科学出版社,2002.
  [3]蔡雪焘.Hibernate开发及整合应用大全[M].北京:清华大学出版社,2006.
  [4](德)Christian Bauer,(澳)Gavin King 著,杨春花,彭永康,俞黎敏译.Hibernate实战(第2版)[M].北京:人民邮电出版社,2008.
其他文献
摘要:文章通过对某站35kV配电开关的故障原因进行分析和判断,分析了合闸线圈烧坏的原因和规律,提出了改进思路和措施,并进行了技术改造。  关健词:35kV开关;合闸控制回路;改进思路  中图分类号:TM764.2文献标识码:A文章编号:1009-2374(2009)02-0027-01    ××变电站35kV配电线路采用的是北京开关厂生产的ZN12-35型的手车式真空开关和弹簧储能操作机构,其合
期刊
摘要:张顺高是我国著名茶业科技专家,被誉为普洱茶的泰斗。文章叙述了他的学术生涯和对云南茶叶科技事业的巨大贡献,对他在古茶树的发现与研究、茶叶高产栽培技术理论、茶树太阳光谱分布规律、云南茶叶生产发展战略、生态茶园建设理论框架、茶文化理论的研究成果做了全面的分析和讨论。  关键词:张顺高;茶叶科技;古茶树;茶栽培;生态;茶文化  中图分类号:TS272 文献标识码:A 文章编号:1009-2374(2
期刊
摘要:文章针对节能和提高供水质量问题,阐述了采用变频技术、PLC技术及自动控制技术相结合来实现的恒压供水控制的系统总体设计和应用。  关键词:恒压供水系统;变频技术;PLC技术;供水质量  中图分类号:TM921.5文献标识码:A文章编号:1009-2374(2009)02-0058-02    恒压供水是指用户端在任何时候,不管用水量的大小,总能保持管网中水压的基本恒定。恒压供水系统的控制策略是
期刊
摘要:针对目前面临的数据库安全问题,文章从数据库系统的安全模型入手,对SqlSever数据库的安全配置进行描述,分析讨论了SQL SERVER数据库使用中的安全问题,针对不同的用户分析了可能存在的安全问题,并提出了一些具体的解决方法和建议,从而提高用户对数据库安全防范意识。  关键词:SQL Server;数据库;数据库安全;访问控制  中图分类号:TP393文献标识码:A文章编号:1009-23
期刊
摘要:针对当前网上购物的热潮,作者从需求的角度开发了网上购物系统。文章论述了系统开发的过程和部分代码,系统开发过程中采用了当前比较流行的ASP技术JavaScript语言,数据库采用了SQL Server 2000为平台。  关键词:ASP;网上购物系统;HTML语言;登录模块  中图分类号:TP31文献标识码:A文章编号:1009-2374(2009)02-0049-02    随着信息技术时代
期刊
摘要:道路交通事故与道路线型有着直接的关系,文章对我国国道上平曲线路段的线形特点与交通事故数目进行分析,建立了道路平曲线路段交通事故数目预测的BP人工神经网络模型。结果表明用BP神经网络模型预测平曲线路段的交通事故有相当的准确性,这对道路平曲线设计的安全性有着重要的现实意义。  关键词:交通事故;平曲线路段线形;BP网络;交通安全研究现状  中图分类号:U491.31文献标识码:A文章编号:100
期刊
摘要:根据我院选修课管理的实际情况,文章提出了基于B/S结构,使用ASP脚本语言和Delphi6.0进行网络选修课管理系统开发的设计方案,目的在于提高教务工作效率,使选修课管理规范化。  关键词:选修课管理;B/S;ASP;SQL Server 2000  中图分类号:TP317文献标识码:A文章编号:1009-2374(2009)02-0039-03    一、引言    我院传统的选修课选课流
期刊
摘要:文章介绍了一种基于通用无线分组业务(General Packet Radio Service,GPRS)的远程无线自动抄表系统,给出了系统实现的整体框图和工作原理,提出了基于BENQ公司M23模块和Winbond公司W77E58单片机的电能远程抄表系统,从系统的硬件结构和软件设计等方面分析了该系统的实现方案。  关键词:远程抄表;GPRS;M23模块;W77E58单片机;AT指令  中图分类
期刊
摘要:随着铁路现代化的全面推进及铁路建设新一轮高潮的到来,铁路无线通信系统作为铁路运输生产指挥调度系统的传输通道,为保障铁路运输安全和运输效率起到了越来越重要的作用。GSM-R无线通信系统将以高效、灵活、经济、实用、可扩展等特性满足铁路无线通信的要求及未来发展。  关键词:铁路无线通信;GSM-R;技术规范  中图分类号:TP313文献标识码:A文章编号:1009-2374(2009)02-007
期刊
摘要:文章介绍了PID在工业自动化控制系统的重要性,它是控制系统的基础部分,也是关键部分,阐述了PID的工作原理和被控参数选定原则。  关键词:PID调节;给定值;测量值;偏差值;工业自动控制  中图分类号:TM715文献标识码:A文章编号:1009-2374(2009)02-0076-02    随着电子、计算机、通讯、故障诊断、冗余校验和图形显示等技术的高速发展,工业自动化水平也日益提高。但在
期刊