仓酷云

标题: JAVA网页编程之Eclipse疾速上手Hibernate--5. 组件映照... [打印本页]

作者: 若相依    时间: 2015-1-18 11:51
标题: JAVA网页编程之Eclipse疾速上手Hibernate--5. 组件映照...
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊这篇文章次要说的是在Hibernate中的组件(Component)映照,能够参考Hibernate官方文档的第7章。至于情况设置,能够参考这个系列的后面几篇文章。1.创立项目·新建一个Java项目:ComponentMapping,注重选中“创立独自的源文件夹和输入文件夹”,同时增加“用户库”:hibernate。2.编写类文件·新建一个类,包名:javamxj.hibernate.component,类名:Person。
Person.java

/**Hibernate-组件(Component)映照*创立日期2005-4-10*@authorjavamxj(分享java康乐)*@linkBlog:htpp://javamxj.mblogger.cn*htpp://blog.csdn.net/javamxj/*/packagejavamxj.hibernate.component;/***@hibernate.class*/publicclassPerson{privateLongid;privateStringusername;privateAddressaddress;/***@hibernate.id*generator-class="hilo"*unsaved-value="null"*/publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}/***@hibernate.property*length="15"*unique="true"*not-null="true"*/publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}/***@hibernate.component*/publicAddressgetAddress(){returnaddress;}publicvoidsetAddress(Addressaddress){this.address=address;}}
·Person类挪用了Address类,注重在“getAddress()”办法上的“@hibernate.component”标志。·Address类只含有一些“@hibernate.property”标志,未将其自力映照为一个表。
Address.java

packagejavamxj.hibernate.component;publicclassAddress{privateStringcountry;privateStringcity;privateStringstreet;privateStringzipCode;publicAddress(){}publicAddress(Stringcountry,Stringcity,Stringstreet,Stringzipcode){super();this.country=country;this.city=city;this.street=street;this.zipCode=zipcode;}/***@hibernate.property*length="12"*/publicStringgetCity(){returncity;}publicvoidsetCity(Stringcity){this.city=city;}/***@hibernate.property*length="12"*/publicStringgetCountry(){returncountry;}publicvoidsetCountry(Stringcountry){this.country=country;}/***@hibernate.property*length="6"*/publicStringgetZipCode(){returnzipCode;}publicvoidsetZipCode(Stringnumber){this.zipCode=number;}/***@hibernate.property*length="12"*/publicStringgetStreet(){returnstreet;}publicvoidsetStreet(Stringstreet){this.street=street;}publicStringtoString(){return("寓居在"+country+city+"市"+street+"区"+"
        邮政编码:"+zipCode);}}
3.运转义务·复制《Eclipse疾速上手Hibernate--4.承继映照(1)》文中的build.xml到项目目次下。·双击“generate-hbm”义务,会发明在包中多了一个Animal.hbm.xml文件,在src目次下会多了一个hibernate.cfg.xml文件,假如没有,按F5键革新一下。
Person.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.hibernate.component.Person"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-Person.xmlcontainingtheadditionalparametersandplaceitinyourmergedir.--></generator></id><propertyname="username"type="java.lang.String"update="true"insert="true"access="property"column="username"length="15"not-null="true"unique="true"/><componentname="address"class="javamxj.hibernate.component.Address"><propertyname="city"type="java.lang.String"update="true"insert="true"access="property"column="city"length="12"/><propertyname="country"type="java.lang.String"update="true"insert="true"access="property"column="country"length="12"/><propertyname="zipCode"type="java.lang.String"update="true"insert="true"access="property"column="zipCode"length="6"/><propertyname="street"type="java.lang.String"update="true"insert="true"access="property"column="street"length="12"/></component><!--ToaddnonXDocletpropertymappings,createafilenamedhibernate-properties-Person.xmlcontainingtheadditionalpropertiesandplaceitinyourmergedir.--></class></hibernate-mapping>
·运转MySql服务器,然后双击“schemaexport”义务,在项目根目次下,会发生一个“schema-export.sql”文件。schema-export.sql
droptableifexistsPersondroptableifexistshibernate_unique_keycreatetablePerson(idbigintnotnull,usernamevarchar(15)notnullunique,cityvarchar(12),countryvarchar(12),zipCodevarchar(6),streetvarchar(12),primarykey(id))createtablehibernate_unique_key(next_hiinteger)insertintohibernate_unique_keyvalues(0)
·切换到数据库中,会发明已主动发生了数据表Person5.测试程序●这一次分歧于后面的几个实例,此次先完成一个HibernateUtil帮助类,用来办理Hibernate的Session,如许测试类的代码就对照复杂了,能够参考Hibernate官方文档的第1章。·新建一个类,包名:javamxj.hibernate.util,类名:HibernateUtil,代码以下:
HibernateUtil.java

packagejavamxj.hibernate.util;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importnet.sf.hibernate.HibernateException;importnet.sf.hibernate.Session;importnet.sf.hibernate.SessionFactory;importnet.sf.hibernate.Transaction;importnet.sf.hibernate.cfg.Configuration;publicclassHibernateUtil{privatestaticLoglog=LogFactory.getLog(HibernateUtil.class);privatestaticSessionFactorysessionFactory;privatestaticfinalThreadLocalthreadSession=newThreadLocal();privatestaticfinalThreadLocalthreadTransaction=newThreadLocal();publicstaticSessionFactorygetSessionFactory(){if(sessionFactory==null){try{//CreatetheSessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();}catch(HibernateExceptionex){ex.printStackTrace();thrownewRuntimeException("Configurationproblem:"+ex.getMessage(),ex);}}returnsessionFactory;}publicstaticSessioncurrentSession()throwsHibernateException{Sessions=(Session)threadSession.get();//OpenanewSession,ifthisThreadhasnoneyetif(s==null){s=getSessionFactory().openSession();log.debug("###OpeningnewSessionforthisthread:"+s);threadSession.set(s);}else{log.debug("###Sessionwasexisted:"+s);}returns;}publicstaticvoidcloseSession()throwsHibernateException{Sessions=(Session)threadSession.get();threadSession.set(null);if(s!=null){log.debug("###ClosingSessionofthisthread."+s);s.close();}}publicstaticvoidbeginTransaction()throwsHibernateException{Transactiontx=(Transaction)threadTransaction.get();try{if(tx==null){tx=currentSession().beginTransaction();log.debug("###Startingnewdatabasetransactioninthisthread:"+tx);threadTransaction.set(tx);}else{log.debug("###Txwasexisted:"+tx);}}catch(HibernateExceptionex){throwex;}}publicstaticvoidcommitTransaction()throwsHibernateException{Transactiontx=(Transaction)threadTransaction.get();try{if(tx!=null&&!tx.wasCommitted()&&!tx.wasRolledBack()){log.debug("###Committingdatabasetransactionofthisthread.");tx.commit();}threadTransaction.set(null);}catch(HibernateExceptionex){rollbackTransaction();throwex;}}publicstaticvoidrollbackTransaction()throwsHibernateException{Transactiontx=(Transaction)threadTransaction.get();try{threadTransaction.set(null);if(tx!=null&&!tx.wasCommitted()&&!tx.wasRolledBack()){log.debug("###Tyringtorollbackdatabasetransactionofthisthread.");tx.rollback();}}catch(HibernateExceptionex){throwex;}finally{closeSession();}}}
·好了,然后在包javamxj.hibernate.component下新建一个ComponentDemo.java类。
ComponentDemo.java

packagejavamxj.hibernate.component;importjava.util.Iterator;importjava.util.List;importjavamxj.hibernate.util.HibernateUtil;importnet.sf.hibernate.HibernateException;importnet.sf.hibernate.Session;publicclassComponentDemo{publicstaticvoidmain(String[]args){try{newComponentDemo();}catch(HibernateExceptionhe){he.printStackTrace();}}publicComponentDemo()throwsHibernateException{Sessionsess=HibernateUtil.currentSession();Personp=newPerson();p.setAddress(newAddress("中国","上海","普陀","200055"));p.setUsername("JavaMXJ");sess.save(p);p=newPerson();p.setAddress(newAddress("中国","北京","海淀","100086"));p.setUsername("张三");sess.save(p);Listanimals=sess.find("from"+Person.class.getName());for(Iteratorit=animals.iterator();it.hasNext();){Personperson=(Person)it.next();System.out.println(person.getUsername()+":"+person.getAddress());}HibernateUtil.closeSession();}}
·运转这个类,把持台输入以下:·同时,数据表中天生以下数据:·最初的项目布局以下:
主要缺点就是:速度比较慢,没有C和C++快
作者: 不帅    时间: 2015-1-21 16:18
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 因胸联盟    时间: 2015-1-30 21:01
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 灵魂腐蚀    时间: 2015-1-31 22:39
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 小魔女    时间: 2015-2-1 10:11
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者: 若相依    时间: 2015-2-8 09:26
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 愤怒的大鸟    时间: 2015-2-25 08:11
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 山那边是海    时间: 2015-3-5 08:43
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: admin    时间: 2015-3-10 23:51
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者: 变相怪杰    时间: 2015-3-21 11:10
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者: 冷月葬花魂    时间: 2015-3-29 02:24
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 金色的骷髅    时间: 2015-3-30 10:51
是一种将安全性(Security)列为第一优先考虑的语言
作者: 第二个灵魂    时间: 2015-4-7 20:08
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 再见西城    时间: 2015-4-7 23:01
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者: 深爱那片海    时间: 2015-4-9 02:12
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者: 飘灵儿    时间: 2015-4-10 22:34
是一种使网页(Web Page)产生生动活泼画面的语言
作者: 活着的死人    时间: 2015-4-14 04:30
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 透明    时间: 2015-4-26 15:11
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者: 飘飘悠悠    时间: 2015-5-1 10:10
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2