欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用hbm2java生成Hibernate類(lèi)
用hbm2java生成Hibernate類(lèi) matrix.org.cn  2006-3-3  保存本文  推薦給好友  QQ上看本站  收藏本站 --------------------------------------------------------------------------------   對于管理Hiberante 映射文件,現有多種策略, 如:   · 一切手工編寫(xiě)   · 把xdoclet標記放在你的Java 類(lèi)中, 讓其生成相應的映射文件。   · 從SQL 模式(schema)生成Hibernate 映射文件和Java類(lèi)。   · 手工編寫(xiě)Hibernate 映射文件, 并且從Hibernate 映射生成Java類(lèi)和SQL模式。   · 基于給定的SQL 模式,手工編寫(xiě)Hibernate 映射文件,并利用hbm2java工具生成Java類(lèi)?! ≡诒疚闹? 我們會(huì )著(zhù)眼于上述方法中的最后那種方法。盡管這樣的選擇通常只是約略的嘗試, 但此方法的確在多數情況下有許多優(yōu)勢:  · Hibernate 映射集中在映射文件中,而不是把這些信息散布在Java源代碼中,這使維護變得更加容易。在某些情況下,XDoclet annotation 不支持所有在Hibernate映射模式中可用的功能,你還可通過(guò)映射獲得更好的控制。   · 數據庫模式可分開(kāi)來(lái)維護,而不是從Java 類(lèi)或Hibernate映射文件生成。這允許那些對Java/Hibernate不甚了解的數據庫管理員(DBA)對數據庫細節(索引,表空間,表類(lèi)型等)本身有更好的控制?! ∮捎成湮募蒍ava類(lèi)  這種方式下,Hibernate映射文件主導著(zhù)一切。所有的映射信息都集中在這些文件中, 就意味著(zhù)不會(huì )在源代碼中使用annotations。所有的持久化類(lèi)都由hbm2java工具生成。之后,那些類(lèi)就不能被修改。此過(guò)程如圖1所示。首先,你持有一組Hibernate映射文件。你或許也需要一個(gè)hbm2java配置文件,通常稱(chēng)之為hbm2java.xml。利用這兩個(gè)引子,hbm2java工具為每個(gè)Hibernate映射文件生成一個(gè)或多個(gè)Java類(lèi)。hbm2java配置文件對類(lèi)生成過(guò)程的優(yōu)化是有用的?! D1.用hbm2java工具將Hibernate映射生成Java類(lèi)   一個(gè)簡(jiǎn)單類(lèi)生成的例子  讓我們從一個(gè)非常簡(jiǎn)單的例子開(kāi)始。假設我們想映射一個(gè)BOOK的簡(jiǎn)單數據庫表,表結構定義如下:Column | Type | Modifiers------------+-----------------------+-----------BOOK_ID | character(32) | not nullBOOK_TITLE | character varying(80) | not nullBOOK_ISBN | character varying(20) | not null  為了生成這個(gè)類(lèi), 我們可以使用以下的Hiberante映射文件。注意怎樣利用元屬性(meta-attriute)來(lái)添加注釋或優(yōu)化類(lèi)的生成。 A Book business object. @author Duke The unique ISBN code for this book.   使用此映射文件,hbm2java會(huì )生成看起來(lái)象這樣的類(lèi):/** * A Book business object. * @author Duke */public class Book { private String id; private String name; private String isbn; public Book() { } public String getId() { return id; } private void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } /** * The unique ISBN code for this book. */ public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; }}   為實(shí)際項目生成類(lèi)  實(shí)際上,hbm2java被設計成用來(lái)把Hibernate映射文件轉化成一組相應的Java類(lèi)。如果你想在實(shí)際的應用程序中使用這種方法,很顯然,對于所有的Hibernate映射文件一次性生成類(lèi)會(huì )更為方便。最好的方法是把類(lèi)生成結合進(jìn)你的自動(dòng)化構建過(guò)程中。結合進(jìn)Ant構建過(guò)程中使用Ant調用hbm2java是相當直接的。首先,你需要申明hbm2java任務(wù)(task)以便Ant可以調用它: classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask" classpathref="project.class.path"/>   接著(zhù),你要用到這個(gè)任務(wù)。例如,通過(guò)寫(xiě)一個(gè)目標(target)將源目錄中的所有*.hbm.xml文件生成源代碼。假設${src.hibernate}表示含有Hibernate映射文件的目錄,${src.generated}就是你想放源代碼的地方。這樣Ant任務(wù)看起來(lái)就象是: description="Generate Java source code from the Hibernate mapping files">   用Maven 1 定制構建過(guò)程  為結合進(jìn)Maven ( 1.0)構建過(guò)程,你需要修改maven.xml文件。Maven代碼就存放在這個(gè)文件中。腳本(script)主要檢查了Hibernate映射文件自上次類(lèi)生成后是否已被更改(使用uptodate 標記),如果沒(méi)有,就調用此前所描述的Ant中的hbm2java任務(wù)。這種情況下,我們做了以下的假設:  · hbm2java.xml配置文件應在src/hibernate目錄中  · Hibernate映射文件應在src/hibernate目錄中  · 在src/generated/src/java目錄下生成Java類(lèi) targetfile="${maven.src.dir}/generated/hbm.jar"> value="${hibernateBuild.uptodate}"/> classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask" classpathref="maven.dependency.classpath"/> output="${maven.src.dir}/generated/src/java" >   用Maven 2 定制構建過(guò)程  若碰巧你正使用Maven 2,事情就更簡(jiǎn)單一點(diǎn)了。把maven-antrun-plugin插件添加到pom.xml文件中,而不是在maven.xml文件中使用完整的goals屬性(pre and post goals)。在此插件中的task那部分,你可以象上述那樣直接調用Ant 任務(wù)。 4.0.0 ... ... maven-antrun-plugin generate-sources classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="maven.dependency.classpath"/> run   在Hibernate 3中使用hbm2java  Hbm2java 工具已經(jīng)經(jīng)受了Hibernate 3 的考驗。hbm2java任務(wù)與其它相似的任務(wù)一起,被集成進(jìn)了新版Hibernate 工具集中的hibernatetool任務(wù)(撰寫(xiě)此文時(shí)仍是alpha版)。Ant任務(wù)需要在類(lèi)路徑(class path)中查找以下的.jar 文件:  · hibernate-tools.jar   · velocity-1.4.jar   · velocity-tools-generic-1.4.jar   · jtidy-r8-21122004.jar   · hibernate3.jar   · JDBC drivers   這樣一來(lái),Ant任務(wù)就要作如下申明: classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="maven.dependency.classpath"/>  最后,你在hibernatetool 任務(wù)中調用hbm2java任務(wù),做法如下: classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="maven.dependency.classpath"/>   注意:盡管Hibernate 3版的工具是很有前途的,但它仍只是在alpha階段,因此使用時(shí)務(wù)必小心為是。(譯注:翻譯此文時(shí)最新的Hibernate版本是3.1.2,Hibernate Tools的版本是3.1 beta 4)  定制生成的Domain類(lèi)  現在你知道了怎樣從Hibernate映射生成Java源代碼, 那么下一步呢?為了更加具體地討論,我們將使用如圖2 和3所描述的簡(jiǎn)單類(lèi)模型。這個(gè)類(lèi)模型表示Employee數據庫。每個(gè)employee賦予一country,講一種或多種language。每個(gè)country 也有一組國際機場(chǎng)(airport)?! D2. 示例應用程序的UML類(lèi)圖  圖3. 示例中所用的數據庫模式  有時(shí),你可能想添加域邏輯到Domain類(lèi)中。實(shí)際上,對多數人來(lái)說(shuō),生成Java類(lèi)的主要缺點(diǎn)是Domain類(lèi)變得相對被動(dòng),而且把業(yè)務(wù)邏輯方法加入生成的Domain類(lèi)中并不容易,就如所論證的那樣使它們更不接近“面向對象“。對這問(wèn)題并沒(méi)有一個(gè)萬(wàn)能的解決方案,但我們在此描述了一些可能的方法。   把代碼放入映射文件: class-code元屬性(meta attribute)  對于簡(jiǎn)單的方法,你可以用class-code元屬性來(lái)在Hibernate映射文件中指定額外的Java代碼。例如,假設我們想在country和airports間建立雙向關(guān)系。只要我們想增加airport屬性到Country 對象,我們就要確定在A(yíng)irport對象中相應地增加country屬性。我們可以這么做: true /** * Add an airport to this country */ public void addAirport(Airport airport) { airport.setCountry(this); if (airports == null) { airports = new java.util.HashSet(); } airports.add(airport); } ]]>   除了那些非常小的方法,這種做法并不是特別地令人滿(mǎn)意:在XML文件里編寫(xiě)Java代碼的做法很容易出錯而且難于維護。使用SQL表達式有時(shí)業(yè)務(wù)邏輯(特別地如果引入了聚合,求和,合計等運算)可能會(huì )更自然地用SQL表達式來(lái)定義: formula="(select sum(item.amount) from item where item.order_id = order_id)" />   在多數情況下這是非常好的解決方案。但是,必須注意的是每次Hibernate從數據庫加載對象時(shí)都會(huì )執行查詢(xún)的動(dòng)作,這可能會(huì )對性能造成影響?! ∈褂没?lèi)  你也可以用generated-class元屬性來(lái)定義基類(lèi),hbm2java會(huì )用這些元屬性生成基類(lèi),這樣你就可以在所生成基類(lèi)的子類(lèi)中自由地添加業(yè)務(wù)邏輯。例如,我們可以在Country類(lèi)上應用這種技術(shù),就象下面所描述的: true CountryBase protected   hbm2java生成CountryBase類(lèi),此類(lèi)包含了所有在映射文件中描述的屬性,getter,setter等。接著(zhù),你可以在Country的派生類(lèi)中自由地添加業(yè)務(wù)邏輯,這些會(huì )被Hibernate使用并實(shí)例化,例如: public class Country extends CountryBase { /** * Add an airport to this country */ public void addAirport(Airport airport) { airport.setCountry(this); if (getAirports() == null) { setAirports(new java.util.HashSet()); } getAirports().add(airport); } }  包裝(Wrapper)或委派(Delegate)模式(Pattern)  對于更復雜的業(yè)務(wù)邏輯,你或許也想使用下列技術(shù)中的一種:  · 你可以定義“wrapper”或“delegate”類(lèi),這些類(lèi)含有作為屬性的Domain類(lèi),并且提供了指定域類(lèi)額外的業(yè)務(wù)邏輯?! ?#183; 你可能更喜歡“服務(wù)(service)”或“外觀(guān)(façade)”方法,“façade”對象(如無(wú)狀態(tài)的會(huì )話(huà)EJB)提供了一套相關(guān)的業(yè)務(wù)服務(wù)來(lái)操作Domain對象?! 〗Y論  本文描述了我們用來(lái)管理Hibernate映射的一種方法, 這在我們所特定的環(huán)境中工作得很好。 當然,還有許多別的方法?;蛟S本文會(huì )給你的項目提供一些想法,但無(wú)論你做什么, 總要使用最適合你項目的方法?! ≠Y源  · Hibernate   · Hibernate Tools   · Ant   · Hibernate Ant tool   · Maven   John Ferguson Smart從1991起涉足IT行業(yè), 99年開(kāi)始從事J2EE的開(kāi)發(fā)。   版權聲明:任何獲得Matrix授權的網(wǎng)站,轉載時(shí)請務(wù)必保留以下作者信息和鏈接  原文:http://www.javaworld.com/  譯文:http://www.matrix.org.cn/
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
hibernate官方入門(mén)教程 (轉載)
通過(guò)XDoclet(ant)生成Hibernate映射文件
Hibernate代碼生成初接觸之Middlegen生成hbm文件和java代碼
用Maven做項目管理
利用ant,hibernate的schemaexport自動(dòng)生成數據庫 | 中國JAVA技...
Ant編寫(xiě)hbm2java腳本對Hibernate2和3的區別
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久