飘灵儿 发表于 2015-1-18 11:14:47

JAVA编程:Hibernate作为数据耐久层的剖析和研讨

前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。数据  择要</B>在Java手艺中有很多办法能够对数据举行耐久化,耐久层也是Java使用程序中最主要的部分之一。本文在剖析了3种耐久层支流办理计划的基本上,先容了O-R映照开源项目Hibernate,并先容了在Web使用开辟中如何设置Hibernate的情况,并利用它创建一个使用。

  关头字hibernate,数据耐久化,JDBC,EJB,JDO

  数据耐久层简介

  J2EE的三层布局是指暗示层(Presentation),营业逻辑层(BusinessLogic)和基本架构层(Infrastructure),如许的分别十分典范,可是在实践的项目开辟法中,开辟者一般对三层布局举行扩大来满意一些项目标详细请求,一个最经常使用的扩大就是将三层系统扩大为五层系统,即暗示层(Presentation),把持/中介层(Controller/Mediator)、范畴层(Domain),数据耐久层(DataPersistence)和数据源层(DataSource)。它实际上是在三层架构中增添了两其中间层。把持/中介层位于暗示层和范畴层之间,数据耐久层位于范畴层和基本架构层之间。因为对象典范和干系典范这两年夜范畴之间存在“阻抗不婚配”,以是把数据耐久层独自作为J2EE系统的一个层提出来的缘故原由就是可以在对象-干系数据库之间供应一个乐成的企业级映照办理计划,尽最年夜大概填补这两种典范之间的差别。

  三种耐久层支流办理计划

  1、JDBC

  很多开辟者用JDBC举行数据库程序的开辟。其中体例良多情形下都利用DAO形式,接纳SQL举行查询。固然用此体例可使使用程序代码与详细的数据库厂商和数据库地位有关,不外JDBC是初级其余数据库会见体例,JDBC其实不撑持面向对象的数据库暗示。JDBC数据库暗示完整环绕干系数据库模子。在年夜型使用程序的DAO中誊写如许的代码,保护量长短常年夜的。

  2、EJB

  在J2EE的标准中,为EJB界说了两种耐久化的办理计划:一种是BMP,另外一种是CMP。个中CMP不必要将SQL语句到场到代码中。今朝,在接纳J2EE的使用中,EJBCMP体例失掉了普遍使用。加倍惹人注重的是,跟着EJB标准的开展,CMP也包括了一些初级干系的内容。可是,CMP的利用对照庞大,对良多开辟职员来讲对照难以把握。并且,不是在一切的情形下都合适在体系中接纳EJB,并且想要十分分明的懂得EJB标准也长短常费时的。在用EJB编码前,先要让专家了解API,然后必要懂得每个容器部署时所要存眷的手艺。别的,很多情形下商用容器的功能和撑持也不是很好。

  3、JDO

  JDO是一个存储java对象的标准,JDO标准1.0的提出可使你将精神会合在计划Java对象模子,然后在企业使用软件架构的分歧层面中存储传统的Java对象(PlainOldJavaObjects,简称POJOs),接纳JDOQL言语举行SQL操纵。一些公司(包含sun)妄图依据JDO标准举行计划并完成JDO产物,但是他们都不克不及很好的举行完成,而且功能优化上对照差。

  数据耐久层新的办理计划Hibernate

  1、Hibernate先容

  Hibernate是一个开放源代码的对象干系映照框架,它对JDBC举行了轻量级的对象封装,使Java程序员能够为所欲为的利用对象编程头脑来利用数据库。它不但供应了从Java类到数据表之间的映照,也供应了数据查询和恢复机制。相对利用JDBC和SQL来手工操纵数据库,Hibernate能够年夜年夜削减操纵数据库的事情量。别的Hibernate能够使用代办署理形式来简化载进类的历程,这将年夜年夜削减使用HibernateQL从数据库提取数据的代码的编写量,从而勤俭开辟工夫和开辟本钱Hibernate能够和多种Web服务器大概使用服务器优秀集成,现在已撑持几近一切的盛行的数据库服务器。

  2、Hibernate道理

  Hibernate手艺实质上是一个供应数据库服务的两头件。它的架构如所示:




  显现了hibernate的事情道理,它是使用数据库和其他一些设置文件如hibernate.properties,XMLMapping等来为使用程序供应数据耐久化服务的。

  Hibernate具有很年夜的天真性,但同时它的系统布局对照庞大,供应了好几种分歧的运转体例。在轻型系统中,使用程序供应JDBC毗连,而且自行办理事件,这类体例利用了Hibernate的一个最小子集;在周全办理系统中,关于使用程序来讲,一切底层的JDBC/JTAAPI都被笼统了,Hibernate会替你看管一切的细节。

  利用Hibernate创建一个使用

  1、设置Hibernate

  在src目次下创立名为hibernate.cfg.xml的设置文件,而且将它的路径增加到使用的类路径中就能够完成Hibernate的设置。该设置文件由Hibernate用来毗连到数据库、天生形式和取得别的特定命据库信息的属性构成。要将底层数据库内的变化反射到全部使用,只必要修正该文件内的属性值。该设置文件的内容以下:

<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD2.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>
<session-factory>
 <propertyname="hibernate.connection.driver_class">COM.ibm.db2.jdbc.app.DB2Driver</property>
 <propertyname="hibernate.connection.url">jdbc:db2:cipDB</property>
 <propertyname="hibernate.connection.username">admin</property>
 <propertyname="hibernate.connection.password">rubipass</property>
 <propertyname="dialect">cirrus.hibernate.sql.DB2Dialect</property>
 <mappingresource="com/ubipass/cip/data/Event.hbm.xml"/>
</session-factory>
</hibernate-configuration>
  2、创立映照文档

  映照文档是用来界说耐久数据和在必要时保留关于对象的耐久域、联系关系、子类和代办署理的XML文档。关于每一个耐久对象和以名字class_name.hbm.xml保留的文件来讲,都要创立一个映照文档。在class_name.hbm.xml中class_name就是对象的类名,上面是Event.hbm.xml的内容。

<!DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/HibernateMappingDTD2.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
 <classname="com.ubipass.cip.Event"table="EVENTS">
  <idname="id"column="uid"type="long">
   <generatorclass="increment"/>
  </id>
  <propertyname="date"column="event_date"type="timestamp"/>
  <propertyname="title"column="event_title"type="string"/>
 </class>
</hibernate-mapping>
  映照文档在使用启动时编译,它可为Hibernate供应关于耐久对象的响应类、它们的布局、它们应当映照到哪一个数据库表格、和怎样映照的信息。Hibernate也利用这些映照文档,分离使用内建立备SchemaExport和CodeGenerator来天生响应的数据库形式和stubJava类。

  3、天生用于耐久对象的stubJava类

  在创立了映照文档以后这个义务就变得复杂的多。stub类的创立利用Hibernate的内建立备CodeGenerator,实行一个复杂的命令就能够完成。,命令的语法以下:

java-cpclasspathnet.sf.hibernate.tool.hbm2java.CodeGenerator

optionsmapping_files

  它为classpath、options、和mapping_files参数供应了得当的值。上面是经由过程映照文档Event.hbm.xml天生的stubjava类的部分代码。
 
packagecom.ubipass.cip
publicclassEvent{
 privateStringtitle;
 ……
 Event(){}
 publicLonggetId(){
  returnid;
 }
 privatevoidsetId(Longid){
  this.id=id;
 }
 ……
}
  4、天生数据库形式

  要利用Hibernate的SchemaExport来天生数据库形式,在提交了用于参数的得当值以后实行以下命令:

java-cpclasspathnet.sf.hibernate.tool.hbm2ddl.SchemaExportoptionsmapping_files

  此命令为classpath、options、和mapping_files参数供应了得当的值。显现了由映照文档天生的形式的形状。



  5、初始化并运转Hibernate的代码

  要初始化和运转hibernate,必要接纳以下步骤:

  ・在得当的类中,初始化和组装想要的耐久对象;

  ・在使用启动时利用net.sf.hibernate.cfg.Configuration对象猎取net.sf.hibernate.SessionFactory对象;

  ・挪用SessionFactory对象上的openSession()办法来翻开net.sf.hibernate.Session;

  ・保留想要的对象,封闭Session。

  上面的代码显现了怎样对上述的步骤举行完成:

//初始化耐久对象

Eventev=newEvent();
ev.setDate("1/4/2004")
ev.setTitle("Hibernatestartup");
try{
 //入手下手Hibernate
 Configurationcfg=newConfiguration().addClass(Event.class);
 SessionFactorysf=cfg.buildSessionFactory();
 //翻开Session
 Sessionsess=sf.openSession();
}catch(HibernateExceptione){
 e.printStackTrace();
}

//保留Product并封闭Session

Transactiont=sess.beginTransaction();
sess.save(ev);
t.commit();
sess.close();
  总结

  Hibernate是一个功效壮大,能够无效地举行数据库数据到营业对象的O/R映照计划。Hibernate推进了基于一般Java对象模子,用于映照底层数据布局的耐久对象的开辟。经由过程将耐久层的天生主动扩大到一个更年夜的局限,Hibernate使开辟职员用心完成营业逻辑而不必专心于烦琐的数据库方面的逻辑,同时供应了加倍公道的模块分别的办法。
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。

只想知道 发表于 2015-1-20 18:27:21

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

第二个灵魂 发表于 2015-2-1 16:54:30

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

若相依 发表于 2015-2-2 11:13:30

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

简单生活 发表于 2015-2-7 18:34:03

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

小妖女 发表于 2015-2-14 23:06:51

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

分手快乐 发表于 2015-2-19 21:06:41

Java是一种计算机编程语言,拥有跨平台、面向对java

变相怪杰 发表于 2015-3-1 12:59:11

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

精灵巫婆 发表于 2015-3-10 17:01:13

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

仓酷云 发表于 2015-3-17 08:11:55

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

乐观 发表于 2015-3-24 03:10:22

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
页: [1]
查看完整版本: JAVA编程:Hibernate作为数据耐久层的剖析和研讨