|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。承继上篇文章《Eclipse疾速上手Hibernate--4.承继映照(1)》中已谈了每一个类条理布局一个表(tableperclasshierarchy)的战略,这篇文章次要说的是每一个子类一个表(tablepersubclass)的战略。一些反复的部分这里就不说了,请参考上篇文章。1.创立项目·持续相沿上篇文章中所建的Java项目:InheritanceMapping。2.编写类文件·新建一个类,包名:javamxj.inheritance.two,类名:Animal。然后在天生的代码中增加变量,再使用“天生Getter和Setter”,详细体例同《Eclipse疾速上手Hibernate--1.进门实例》文章中的编纂User.java的体例一样。·这个类是父类,只是天生一个复杂的表。
Vehicle.java
/**Hibernate-承继映照(每一个子类一个表)*创立日期2005-4-9*@authorjavamxj(分享java康乐)*@linkBlog:htpp://javamxj.mblogger.cn*htpp://blog.csdn.net/javamxj/*/packagejavamxj.inheritance.two;/***@hibernate.class*/publicclassVehicle{privateLongid;privateStringname;/***@hibernate.id*column="ID"*generator-class="hilo"*unsaved-value="null"*/publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}/***@hibernate.property*length="24"*/publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}
·子类Car.javaCar.java
packagejavamxj.inheritance.two;/***@hibernate.joined-subclass*@hibernate.joined-subclass-key*column="id"*/publicclassCarextendsVehicle{privateStringseat;/***@hibernate.property*column="载客"*length="24"*/publicStringgetSeat(){returnseat;}publicvoidsetSeat(Stringseat){this.seat=seat;}}
·子类Truck.javaTruck.java
packagejavamxj.inheritance.two;/***@hibernate.joined-subclass*@hibernate.joined-subclass-key*column="id"*/publicclassTruckextendsVehicle{privateStringload;/***@hibernate.property*column="载重"*length="24"*/publicStringgetLoad(){returnload;}publicvoidsetLoad(Stringload){this.load=load;}}
·这两个子类都很复杂,注重增加的hibernate.joined-subclass的标志。·好了,这时候全部项目标布局以下:3.运转义务·双击“generate-hbm”义务,会发明在包中多了一个Vehicle.hbm.xml文件。假如没有,按F5键革新一下(这里倡议翻开Eclipse的“首选项”对话框,在“事情台”中勾选“主动革新事情空间”和“在构建之前主动保留”这两项,如许今后不必每次都革新了)。
Vehicle.hbm.xml
<?xmlversion="1.0"encoding="GBK"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD2.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><hibernate-mapping><classname="javamxj.inheritance.two.Vehicle"dynamic-update="false"dynamic-insert="false"select-before-update="false"optimistic-lock="version"><idname="id"column="ID"type="java.lang.Long"unsaved-value="null"><generatorclass="hilo"><!--ToaddnonXDocletgeneratorparameters,createafilenamedhibernate-generator-params-Vehicle.xmlcontainingtheadditionalparametersandplaceitinyourmergedir.--></generator></id><propertyname="name"type="java.lang.String"update="true"insert="true"access="property"column="name"length="24"/><!--ToaddnonXDocletpropertymappings,createafilenamedhibernate-properties-Vehicle.xmlcontainingtheadditionalpropertiesandplaceitinyourmergedir.--><joined-subclassname="javamxj.inheritance.two.Truck"dynamic-update="false"dynamic-insert="false"><keycolumn="id"/><propertyname="load"type="java.lang.String"update="true"insert="true"access="property"column="载重"length="24"/></joined-subclass><joined-subclassname="javamxj.inheritance.two.Car"dynamic-update="false"dynamic-insert="false"><keycolumn="id"/><propertyname="seat"type="java.lang.String"update="true"insert="true"access="property"column="载客"length="24"/></joined-subclass></class></hibernate-mapping>
·重点是看看“joined-subclass”标签。·同时在hibernate.cfg.xml文件中会主动增加一个映照文件信息:<mappingresource="javamxj/inheritance/two/Vehicle.hbm.xml"/>·先运转MySQL,然后双击“schemaexport”义务,在项目根目次下,会更新“schema-export.sql”文件。翻开这个文件,会发明增加了以下一些语句。createtableCar(idbigintnotnull,载客varchar(24),primarykey(id))createtableTruck(idbigintnotnull,载重varchar(24),primarykey(id))createtableVehicle(IDbigintnotnull,namevarchar(24),primarykey(ID))·切换到数据库中,会发明已主动发生了数据表Car、Truck、Vehicle。·将数据表与映照文件Vehicle.hbm.xml对比看看,能够更好的了解每一个子类一个表的战略。4.测试程序·好了,在包javamxj.inheritance.two下新建一个Demo.java类,很复杂,前半部分是增加数据,后半部分是复杂的测试。
Demo.java
/**Hibernate-承继映照(每一个子类一个表)*创立日期2005-4-9*@authorjavamxj(分享java康乐)*@linkBlog:htpp://javamxj.mblogger.cn*htpp://blog.csdn.net/javamxj/*/packagejavamxj.inheritance.two;importjava.util.Iterator;importjava.util.List;importnet.sf.hibernate.HibernateException;importnet.sf.hibernate.Session;importnet.sf.hibernate.SessionFactory;importnet.sf.hibernate.Transaction;importnet.sf.hibernate.cfg.Configuration;publicclassDemo{publicstaticvoidmain(String[]args){try{newDemo();}catch(HibernateExceptionhe){he.printStackTrace();}}publicDemo()throwsHibernateException{SessionFactorysf=newConfiguration().configure().buildSessionFactory();Sessionsess=sf.openSession();Transactiontx=null;try{tx=sess.beginTransaction();Carcar=newCar();car.setName("奇瑞QQ");car.setSeat("4人");sess.save(car);Trucktruck=newTruck();truck.setName("一汽束缚");truck.setLoad("10吨");sess.save(truck);tx.commit();}catch(HibernateExceptione){if(tx!=null)tx.rollback();throwe;}finally{sess.close();}sess=sf.openSession();tx=null;try{tx=sess.beginTransaction();Listpets=sess.find("from"+Vehicle.class.getName());for(Iteratorit=pets.iterator();it.hasNext();){Vehiclevehicle=(Vehicle)it.next();System.out.println("车型"+vehicle.getName()+"itsclassis:"+vehicle.getClass().getName());}tx.commit();}catch(HibernateExceptione){if(tx!=null)tx.rollback();throwe;}finally{sess.close();}}}
·运转这个类,把持台输入以下:·同时,数据表中天生以下数据:小结:●长处:·与面向对象的观点的分歧性最好。对多态的撑持最好,关于对象所大概充任的脚色仅必要在响应的表中保留纪录。·易于修正基类和增添新的类。·这类映照几近有最好的空间勤俭性。独一的简单就是分外的OID,来毗连分歧的层级条理。●弱点:·数据库中存在大批的表。·会见数据的工夫较长。在读写相干的义务上,这类映照体例相称费资本,这个价值还跟着承继条理的增加而增年夜。·对报表的撑持较差,除非界说视图。参考:·HIBERNATE-切合Java习气的干系数据库耐久化(第8章)·Hibernate简化承继映照·MappingObjectstoRelationalDatabases:O/RMappingInDetail·Mappingobjectstorelationaldatabases下篇文章漫谈谈每一个详细类一个表的战略。
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点, |
|