版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1什么是持久化幾乎所有的應(yīng)用程序都需要持久化數(shù)據(jù)。持久化在應(yīng)用程序開發(fā)中是基本概念之一。如果一個(gè)信息系統(tǒng)在斷電時(shí)沒有保存數(shù)據(jù),這個(gè)系統(tǒng)就沒有什么實(shí)用價(jià)值了。當(dāng)我們?cè)贘ava中談到持久化時(shí),一般是指利用SQL在關(guān)系數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù)。我們先簡(jiǎn)單地看看這項(xiàng)技術(shù),以及如何在Java中使用它。有了這個(gè)信息基礎(chǔ),再接著討論持久化,以及如何在面向?qū)ο蟮膽?yīng)用程序中實(shí)現(xiàn)它。1關(guān)系數(shù)據(jù)庫就像大部分其他的開發(fā)人員一樣,你可能已經(jīng)使用過關(guān)系數(shù)據(jù)庫。我們大部分人
2、每天都在使用關(guān)系數(shù)據(jù)庫。關(guān)系技術(shù)是個(gè)已知數(shù),僅此一點(diǎn)就成為許多組織選擇它的一個(gè)充分理由。但是只提這一點(diǎn)有些貶低了它應(yīng)得的尊重。關(guān)系數(shù)據(jù)庫的地位如此根深蒂固,是因?yàn)樗鼈兪且环N出奇靈活和穩(wěn)健的數(shù)據(jù)管理方法。由于關(guān)系數(shù)據(jù)模型完整且一致的理論基礎(chǔ),關(guān)系數(shù)據(jù)庫可以有效保證和保護(hù)數(shù)據(jù)的完整性,這是它眾多的優(yōu)良特性之一。有些人甚至?xí)f計(jì)算領(lǐng)域的最后一項(xiàng)大發(fā)明就是用于數(shù)據(jù)管理的關(guān)系概念,它由E.FCodd(Codd,1970)于30多年前首先提出。關(guān)系
3、數(shù)據(jù)庫管理系統(tǒng)既不特定于Java,也不是一種特定于某個(gè)特殊應(yīng)用程序的關(guān)系數(shù)據(jù)庫。這個(gè)重要的原理就是數(shù)據(jù)獨(dú)立(dataindependence)。換句話說,我們無法充分強(qiáng)調(diào)這個(gè)重要的事實(shí):數(shù)據(jù)比任何應(yīng)用程序都存在得更長(zhǎng)久。關(guān)系技術(shù)提供了一種在不同應(yīng)用程序或者構(gòu)成同一應(yīng)用程序(例如事務(wù)引擎和報(bào)告引擎)的不同技術(shù)之間共享數(shù)據(jù)的方式。關(guān)系技術(shù)是許多異構(gòu)的系統(tǒng)和技術(shù)平臺(tái)的一個(gè)共同特性。因此,關(guān)系型數(shù)據(jù)模型經(jīng)常是業(yè)務(wù)實(shí)體常用的企業(yè)級(jí)表示法。關(guān)系數(shù)據(jù)
4、庫管理系統(tǒng)具有基于SQL的應(yīng)用編程接口(ApplicationProgrammingInterface,API);因此,我們稱當(dāng)今的關(guān)系數(shù)據(jù)庫產(chǎn)品為SQL數(shù)據(jù)庫管理系統(tǒng)(databasemanagementsystem),或者當(dāng)我們談到特定系統(tǒng)時(shí),稱之為SQL數(shù)據(jù)庫(database)。在更詳細(xì)地探討SQL數(shù)據(jù)庫應(yīng)用程序方面之前,必須提到一個(gè)重要的問題:雖然有些產(chǎn)品也作為關(guān)系數(shù)據(jù)庫銷售,但是只提供SQL數(shù)據(jù)語言接口的數(shù)據(jù)庫系統(tǒng)并不是真正
5、的關(guān)系數(shù)據(jù)庫,并且在很多方面甚至與原始概念相去甚遠(yuǎn)。自然,這樣就導(dǎo)致了混亂。SQL從業(yè)者抱怨關(guān)系型數(shù)據(jù)模型在SQL語言方面的不足,而關(guān)系型數(shù)據(jù)管理專家則報(bào)怨SQL標(biāo)準(zhǔn)在關(guān)系模型和理念方面實(shí)現(xiàn)得不夠。應(yīng)用程序開發(fā)人員被夾在其中,承受著傳送一些有效東西的壓力。我們將在本書中始終強(qiáng)調(diào)有關(guān)這個(gè)問題的一些重要而有意義的方面,但是通常關(guān)注應(yīng)用程序方面的。2理解SQL要有效地使用Hibernate,扎實(shí)地理解關(guān)系模型和SQL是前提條件。你需要理解關(guān)系
6、模型,以及像保證數(shù)據(jù)完整性的標(biāo)準(zhǔn)化這樣的話題,還要利用你的SQL知識(shí)調(diào)優(yōu)Hibernate應(yīng)用程序的性能。Hibernate讓許多重復(fù)的編碼任務(wù)自動(dòng)化,但是如果要利用現(xiàn)代SQL數(shù)據(jù)庫的全部功能,你的持久化技術(shù)必須擴(kuò)充至超越Hibernate本身。記住,根本的目標(biāo)是穩(wěn)健、高效的持久化數(shù)據(jù)管理。34面向?qū)ο髴?yīng)用程序中的持久化在面向?qū)ο蟮膽?yīng)用程序中,持久化允許一個(gè)對(duì)象在創(chuàng)建之后依然存在。對(duì)象的這種狀態(tài)可以被保存到磁盤,且相同狀態(tài)的對(duì)象可以在未
7、來的某個(gè)時(shí)候被重新創(chuàng)建。這并非只限于單獨(dú)的對(duì)象——整個(gè)關(guān)聯(lián)對(duì)象網(wǎng)絡(luò)也可以被持久化,且以后在一個(gè)新的進(jìn)程中被重新創(chuàng)建。大多數(shù)對(duì)象并不是持化久的;瞬時(shí)(transient)對(duì)象的生命周期有限,由實(shí)例化它的進(jìn)程的壽命所決定。幾乎所有的Java應(yīng)用程序都混合包含了持久對(duì)象和瞬時(shí)對(duì)象;因此,我們需要一個(gè)子系統(tǒng)來管理持久化數(shù)據(jù)。現(xiàn)代的關(guān)系數(shù)據(jù)庫為持久化數(shù)據(jù)提供了一個(gè)結(jié)構(gòu)化的表示法,能夠?qū)?shù)據(jù)進(jìn)行操作、排序、搜索和統(tǒng)計(jì)。數(shù)據(jù)庫管理系統(tǒng)負(fù)責(zé)管理并發(fā)性和
8、數(shù)據(jù)的完整性;它們負(fù)責(zé)在多用戶和多應(yīng)用程序之間共享數(shù)據(jù)。它們通過已經(jīng)利用約束實(shí)現(xiàn)的完整性規(guī)則來保證數(shù)據(jù)的完整性。數(shù)據(jù)庫管理系統(tǒng)提供數(shù)據(jù)級(jí)的安全性。當(dāng)我們?cè)诒緯杏懻摮志没瘯r(shí),考慮以下這些事情:結(jié)構(gòu)化數(shù)據(jù)的儲(chǔ)存、組織和獲??;并發(fā)性和數(shù)據(jù)完整性;數(shù)據(jù)共享。特別是,我們正在使用領(lǐng)域模型的面向?qū)ο蟮膽?yīng)用程序環(huán)境中考慮這些問題。使用領(lǐng)域模型的應(yīng)用程序并不直接使用業(yè)務(wù)實(shí)體的表格式表示法;該應(yīng)用程序有它自己的業(yè)務(wù)實(shí)體的面向?qū)ο竽P?。例如,如果一個(gè)在線
9、拍賣系統(tǒng)的數(shù)據(jù)庫有ITEM和BID表,Java應(yīng)用程序就會(huì)定義Item和Bid類。然后,業(yè)務(wù)邏輯并不直接在SQL結(jié)果集的行和列上進(jìn)行工作,而是與這個(gè)面向?qū)ο蟮念I(lǐng)域模型及其作為關(guān)聯(lián)對(duì)象網(wǎng)絡(luò)的運(yùn)行時(shí)實(shí)現(xiàn)進(jìn)行交互。Bid的每個(gè)實(shí)例都引用一個(gè)拍賣Item,而且每個(gè)Item都可以有一個(gè)對(duì)Bid實(shí)例的引用集合。業(yè)務(wù)邏輯并不在數(shù)據(jù)庫中執(zhí)行(作為SQL存儲(chǔ)過程);而是在應(yīng)用層的Java中實(shí)現(xiàn)的。這就允許業(yè)務(wù)邏輯使用高級(jí)的面向?qū)ο蟮母拍?,例如繼承和多態(tài)。
10、比如,我們可以使用眾所周知的設(shè)計(jì)模式,如Strategy(策略)、Mediat(中介者)和Composite(組合)(Gamma等,1995),所有這些模式都依賴于多態(tài)的方法調(diào)用。現(xiàn)在給你一個(gè)警告:并非所有的Java應(yīng)用程序都以這種方式設(shè)計(jì),它們也不應(yīng)該只以這種方式設(shè)計(jì)。簡(jiǎn)單的應(yīng)用程序不用領(lǐng)域模型可能更好。復(fù)雜的應(yīng)用程序可能必須重用現(xiàn)有的存儲(chǔ)過程。SQL和JDBCAPI對(duì)于純表格式數(shù)據(jù)的處理堪稱完美,并且JDBC的行集合(RowSet)
11、使CRUD操作變得更容易了。使用持久化數(shù)據(jù)的表格式表示法很直接且易于理解。然而,對(duì)于含有重要業(yè)務(wù)邏輯的應(yīng)用程序來說,領(lǐng)域模型方法幫助明顯改善代碼的可重用性和可維護(hù)性。實(shí)際上,這兩種策略都是常用和必需的。許多應(yīng)用程序都需要執(zhí)行修改大組數(shù)據(jù)、接近數(shù)據(jù)的過程。同時(shí),在應(yīng)用層中執(zhí)行一般在線事務(wù)處理邏輯的面向?qū)ο蟮念I(lǐng)域模型時(shí),其他的應(yīng)用程序模塊可以從中受益。你需要一種有效地把持久化數(shù)據(jù)帶近應(yīng)用程序代碼的方法。如果我們?cè)俅慰紤]SQL和關(guān)系數(shù)據(jù)庫,最
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論