首页 02_hibernateapp.pdf

02_hibernateapp.pdf

02_hibernateapp.pdf

上传者: 小公子 2011-06-21 评分1 评论0 下载7 收藏0 阅读量115 暂无简介 简介 举报

简介:本文档为《02_hibernateapppdf》,可适用于软件工程领域,主题内容包含第一个Hibernate应用n教学目标n创建Hibernate的配置文件n创建持久化类n创建数据库Scheman创建对象关系映射文件n映射文件的文档符等。

第一个Hibernate应用n教学目标n创建Hibernate的配置文件n创建持久化类n创建数据库Scheman创建对象关系映射文件n映射文件的文档类型定义(DTD)n把Customer持久化类映射到CUSTOMERS表n通过HibernateAPI操纵数据库n用ANT工具管理项目PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn在Java应用中使用Hibernate的步骤n创建Hibernate的配置文件n创建持久化类n创建对象关系映射文件n通过HibernateAPI编写访问数据库的代码PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnHelloapp应用的结构PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnHibernate的配置文件(hibernateproperties)hibernatedialect=netsfhibernatedialectMySQLDialecthibernateconnectiondriverclass=commysqljdbcDriverhibernateconnectionurl=jdbc:mysql:localhost:SAMPLEDBhibernateconnectionusername=roothibernateconnectionpassword=hibernateshowsql=truePDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnHibernate配置文件的属性PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn创建持久化类Customern持久化类符合JavaBean的规范包含一些属性以及与之对应的getXXX()和setXXX()方法。n持久化类有一个id属性用来惟一标识Customer类的每个对象。在面向对象术语中这个id属性被称为对象标识符(OIDObjectIdentifier)通常它都用整数表示nHibernate要求持久化类必须提供一个不带参数的默认构造方法PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn创建数据库SchemacreatetableCUSTOMERS(IDbigintnotprimarykey,NAMEvarchar()not,EMAILvarchar()not,PASSWORDvarchar()not,PHONEint,ADDRESSvarchar(),SEXchar(),ISMARRIEDbit,DESCRIPTIONtext,IMAGEblob,BIRTHDAYdate,REGISTEREDTIMEtimestamp)PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn创建对象关系映射文件Customerhbmxml<hibernatemapping><classname="mypackCustomer"table="CUSTOMERS"><idname="id"column="ID"type="long"><generatorclass="increment"><id><propertyname="name"column="NAME"type="string"not="true"><propertyname="email"column="EMAIL"type="string"not="true"><propertyname="password"column="PASSWORD"type="string"not="true"><propertyname="phone"column="PHONE"type="int"><propertyname="address"column="ADDRESS"type="string"><propertyname="sex"column="SEX"type="character">……<class><hibernatemapping>PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn<id>元素映射OIDn<generator>子元素用来设定标识符生成器。Hibernate提供了提供了多种内置的实现。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn<property>元素映射值类型属性nname属性:指定持久化类的属性的名字。ntype属性:指定Hibernate映射类型。Hibernate映射类型是Java类型与SQL类型的桥梁。ncolumn属性:指定与类的属性映射的表的字段名。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnJava类型、Hibernate映射类型以及SQL类型之间的对应关系PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnCustomerhbmxml配置的对象关系映射PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn采用XML文件来配置对象关系映射的优点nHibernate既不会渗透到上层域模型中也不会渗透到下层数据模型中。n软件开发人员可以独立设计域模型不必强迫遵守任何规范。n数据库设计人员可以独立设计数据模型不必强迫遵守任何规范。n对象关系映射不依赖于任何程序代码如果需要修改对象关系映射只需修改XML文件不需要修改任何程序提高了软件的灵活性并且使维护更加方便。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn通过HibernateAPI操纵数据库PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn通过HibernateAPI操纵数据库PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn创建BusinessService类n初始化Hibernaten通过Hibernate的Session接口操纵数据库:n保存Customer对象n更新Customer对象n加载Customer对象n删除Customer对象n检索Customer对象PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnHibernate的初始化static{try{根据默认位置的Hibernate配置文件的配置信息创建一个Configuration实例Configurationconfig=newConfiguration()configaddClass(Customerclass)创建SessionFactory实例*sessionFactory=configbuildSessionFactory()}catch(Exceptione){eprintStackTrace()}}PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnHibernate的初始化n()创建一个Configuration类的实例Configuration类的构造方法把默认文件路径下的hibernateproperties配置文件中的配置信息读入到内存:Configurationconfig=newConfiguration()n()调用Configuration类的addClass(Customerclass)方法:configaddClass(Customerclass)该方法把默认文件路径下的Customerhbmxml文件中的映射信息读入到内存中。n()调用Configuration类的buildSessionFactory()方法:sessionFactory=configbuildSessionFactory()PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnSessionFactory接口n一个SessionFactory实例对应一个数据存储源应用从SessionFactory中获得Session实例。SessionFactory有以下特点:n它是线程安全的这意味着它的同一个实例可以被应用的多个线程共享。n它是重量级的这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库只需要创建一个SessionFactory实例在应用初始化的时候创建该实例。如果应用同时访问多个数据库则需要为每个数据库创建一个单独的SessionFactory实例。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnSession接口nSession接口是Hibernate应用使用最广泛的接口。nSession也被称为持久化管理器它提供了和持久化相关的操作如添加、更新、删除、加载和查询对象。nSession有以下特点:n不是线程安全的因此在设计软件架构时应该避免多个线程共享同一个Session实例。nSession实例是轻量级的所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象例如为每个客户请求分配单独的Session实例或者为每个工作单元分配单独的Session实例。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnSession接口操纵数据库的方法nSession接口提供了操纵数据库的各种方法如:nsave()方法:把Java对象保存数据库中。nupdate()方法:更新数据库中的Java对象。ndelete()方法:把Java对象从数据库中删除。nload()方法:从数据库中加载Java对象。nfind()方法:从数据库中查询Java对象。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn用Session来执行事务的流程Sessionsession=factoryopenSession()Transactiontxtry{开始一个事务tx=sessionbeginTransaction()执行事务提交事务txcommit()}catch(Exceptione){如果出现异常就撤销事务if(tx!=)txrollback()throwe}finally{不管事务执行成功与否最后都关闭Sessionsessionclose()}PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn正常执行数据库事务的流程PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnsaveCustomer()方法n该方法调用Session的save()方法把Customer对象持久化到数据库中。tx=sessionbeginTransaction()sessionsave(customer)txcommit()n当运行sessionsave()方法时Hibernate执行以下SQL语句:insertintoCUSTOMERS(ID,NAME,EMAIL,PASSWORD,PHONE,ADDRESS,SEX,ISMARRIED,DESCRIPTION,IMAGE,BIRTHDAY,REGISTEREDTIME)values(,'Tom','tomyahoocom','',,'Shanghai','M',,'Iamveryhonest',,'',)n在test()方法中并没有设置Customer对象的id属性Hibernate会根据映射文件的配置采用increment标识符生成器自动以递增的方式为OID赋值。在Customerhbmxml文件中相关的映射代码如下:<idname="id"column="ID"type="long"><generatorclass="increment"><id>PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnfindAllCustomers()方法n该方法调用Session的find()方法查询所有的Customer对象。tx=sessionbeginTransaction()Listcustomers=sessionfind("fromCustomerascorderbycnameasc")for(Iteratorit=customersiterator()ithasNext()){printCustomer(context,out,(Customer)itnext())}txcommit()nSession的find()方法有好几种重载形式本例中传递的是字符串参数“fromCustomerascorderbycnameasc”它使用的是Hibernate查询语言。运行sessionfind()方法时Hibernate执行以下SQL语句:select*fromCUSTOMERSorderbyNAMEascPDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnloadAndUpdateCustomer()方法n该方法调用Session的load()方法加载Customer对象然后再修改Customer对象的属性。tx=sessionbeginTransaction()Customerc=(Customer)sessionload(Customerclass,customerid)csetAddress(address)txcommit()n以上代码先调用Session的load()方法它按照参数指定的OID从数据库中检索出匹配的Customer对象Hibernate会执行以下SQL语句:select*fromCUSTOMERSwhereID=nloadAndUpdateCustomer()方法接着修改Customer对象的address属性。那么Hibernate会不会同步更新数据库中相应的CUSTOMERS表的记录呢?答案是肯定的。Hibernate采用脏检查机制按照内存中的Customer对象的状态的变化来同步更新数据库中相关的数据Hibernate会执行以下SQL语句:updateCUSTOMERSsetNAME="Tom",EMAIL="Tomyahoocom"…ADDRESS="Beijing"…whereID=n尽管只有Customer对象的address属性发生了变化但是Hibernate执行的update语句中会包含所有的字段。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcnprintCustomer()方法n该方法打印Customer对象的信息privatevoidprintCustomer(Customercustomer)throwsException{bytebuffer=customergetImage()FileOutputStreamfout=newFileOutputStream("photocopygif")foutwrite(buffer)foutclose()Systemoutprintln("以下是"customergetName()"的个人信息")Systemoutprintln("ID:"customergetId())Systemoutprintln("口令:"customergetPassword())Systemoutprintln("EMail:"customergetEmail())Systemoutprintln("电话:"customergetPhone())……}PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcndeleteAllCustomers()方法n该方法调用Session的delete()方法删除所有的Customer对象:tx=sessionbeginTransaction()sessiondelete("fromCustomerasc")txcommit()n运行sessiondelete()方法时Hibernate先执行select语句查询CUSTOMERS表的所有Customer对象:select*fromCUSTOMERSn接下来Hibernate根据Customer对象的OID依次删除每个对象:deletefromCUSTOMERSwhereID=PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn用ANT工具管理项目n在buildxml文件中先定义了三个属性:<propertyname="sourceroot"value="src"><propertyname="classroot"value="classes"><propertyname="libdir"value="lib">nsourceroot属性指定Java源文件的路径classroot属性指定Java类的路径libdir属性指定所有JAR文件的路径。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn用ANT工具管理项目n在buildxml文件中接着定义了三个target:npreparetarget:如果存在classes子目录先将它删除。接着重新创建classes子目录。然后把src子目录下所有扩展名为“properties”、“hbmxml”、“xml”以及“gif”的文件拷贝到WEBINFclasses目录下。ncompiletarget:编译src子目录下的所有Java源文件。编译生成的类文件存放在WEBINFclasses子目录下。nruntarget:运行BusinessService类。n<target>元素的depends属性指定所依赖的target当运行runtarget时会依次执行preparetarget、compiletarget和runtarget。PDF文件使用"pdfFactory"试用版本创建wwwfineprintcomcn

职业精品

酒店承包合同范本.doc

某企业人力资源制度.doc

员工离职处理原则.docx

PDF转word方法全面盘点1.doc

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

  • 2008-02-02.pdf

  • 02G02.pdf

  • 02G02.pdf

  • 02G02.pdf

  • 02G02.pdf

  • 02G02.pdf

  • 02_68701-02.pdf

  • 02.02.2008.pdf

  • 02G02.pdf

资料评价:

/ 30
所需积分:1 立即下载

意见
反馈

返回
顶部