淺談Hibernate領(lǐng)域?qū)ο?/h1>
Hibernate有很多值得學(xué)習(xí)的地方,這里我們主要介紹Hibernate領(lǐng)域?qū)ο?,包括介紹結(jié)合一個(gè)簡(jiǎn)單的例子等方面。
Hibernate領(lǐng)域?qū)ο?/STRONG>
***,因?yàn)槲覀冇懻摰氖且粋€(gè)不是很復(fù)雜的、基于web的應(yīng)用程序,我們需要一組能在不同的層之間移動(dòng)的對(duì)象。領(lǐng)域?qū)ο髮佑赡切┐憩F(xiàn)實(shí)世界中的業(yè)務(wù)對(duì)象的對(duì)象們組成,比如:一份訂單(Order)、訂單項(xiàng)(OrderLineItem)、產(chǎn)品(Product)等等。這個(gè)層讓開(kāi)發(fā)者停止建立和維護(hù)不必要的數(shù)據(jù)傳輸對(duì)象(或者叫作DTOs),來(lái)匹配他們的領(lǐng)域?qū)ο蟆T试S你把數(shù)據(jù)庫(kù)信息讀進(jìn)Hibernate領(lǐng)域?qū)ο螅╠omain objects)的一個(gè)對(duì)象圖,這樣你可以在連接斷開(kāi)的情況下把這些數(shù)據(jù)顯示到UI層。那些對(duì)象也能被更新和送回到持久層并在數(shù)據(jù)庫(kù)里更新。而且,你不必把對(duì)象轉(zhuǎn)化成DTOs,因?yàn)镈TOs在不同的應(yīng)用層間移動(dòng),可能在轉(zhuǎn)換中丟失。這個(gè)模型使得Java開(kāi)發(fā)者自然地以一種面向?qū)ο蟮娘L(fēng)格和對(duì)象打交道,沒(méi)有附加的編碼。
結(jié)合一個(gè)簡(jiǎn)單的例子
既然我們已經(jīng)從一個(gè)高的層次上理解了這些組件, 現(xiàn)在就讓我們開(kāi)始實(shí)踐吧。在這個(gè)例子中,我們還是將合并Struts、Spring、Hibernate框架。每一個(gè)這些框架在一篇文章中都有太多的細(xì)節(jié)覆蓋到。這篇文章將用一個(gè)簡(jiǎn)單的例子代碼展示怎樣把它們結(jié)合在一起,而不是進(jìn)入每個(gè)框架的許多細(xì)節(jié)。示例應(yīng)用程序?qū)⑹痉兑粋€(gè)請(qǐng)求怎樣跨越每一層被服務(wù)的。這個(gè)示例應(yīng)用程序的一個(gè)用戶能保存一個(gè)訂單到數(shù)據(jù)庫(kù)中和查看一個(gè)在數(shù)據(jù)庫(kù)中存在的訂單。進(jìn)一步的增強(qiáng)可以使用戶更新或刪除一個(gè)存在的訂單?! ?/P>
你可以下載這個(gè)應(yīng)用的源碼(http://www.onjava.com/onjava/2004/04/07/examples/wiring.zip)。
因?yàn)轭I(lǐng)域?qū)ο螅╠omain objects)將和每一層交互,我們將首先創(chuàng)建它們。這些對(duì)象將使我們定義什么應(yīng)該被持久化,什么業(yè)務(wù)邏輯應(yīng)該被提供,和哪種表現(xiàn)接口應(yīng)該被設(shè)計(jì)。然后,我們將配置持久層和用Hibernate領(lǐng)域?qū)ο螅╠omain objects)定義“對(duì)象-關(guān)系”映射(object-to-relational mappings)。然后,我們將定義和配置我們的業(yè)務(wù)對(duì)象(business objects)。在有了這些組件后,我們就能討論用Spring把這些層連在一起。***,我們將提供一個(gè)表現(xiàn)層(presentation layer),它知道怎樣和業(yè)務(wù)服務(wù)層(business service layer)交流和知道怎樣處理從其它層產(chǎn)生的異常(exceptions)。
【編輯推薦】