石少敏
摘要:面向?qū)ο笞鳛楫?dāng)前企業(yè)級(jí)應(yīng)用系統(tǒng)開發(fā)技術(shù)的基本思想,由于對(duì)象的存儲(chǔ)機(jī)制,存在不可避免的缺陷,即程序?qū)ο笾荒艽嬖谟趦?nèi)存,業(yè)務(wù)數(shù)據(jù)和對(duì)象的生存周期狀態(tài)不能被永久保存。對(duì)象持久化技術(shù)即是該問題的針對(duì)性解決方案。對(duì)于企業(yè)應(yīng)用而言,可靠的對(duì)象持久化方案,是提高應(yīng)用系統(tǒng)健壯性和穩(wěn)定性的保障基礎(chǔ)。
該文即從對(duì)象持久化技術(shù)的架構(gòu)進(jìn)行研究分析,明確其包含的技術(shù)要點(diǎn),并與面向?qū)ο髷?shù)據(jù)庫思想相結(jié)合,闡述其在系統(tǒng)應(yīng)用中的優(yōu)勢(shì),為企業(yè)應(yīng)用開發(fā)提供強(qiáng)健的技術(shù)基礎(chǔ)。
關(guān)鍵詞:對(duì)象持久化;面向?qū)ο?;企業(yè)應(yīng)用;Hibemate
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2012)32-7641-03
1對(duì)象持久化
對(duì)象持久化技術(shù)是提供對(duì)象持久化服務(wù)的中間件技術(shù),其本質(zhì)思想是把數(shù)據(jù)或程序同時(shí)存儲(chǔ)到存儲(chǔ)器或數(shù)據(jù)庫中。從整個(gè)系統(tǒng)的體系結(jié)構(gòu)中把對(duì)象持久化功能分離出來,可以降低系統(tǒng)緊耦合,從而提高系統(tǒng)功能模塊的復(fù)用程度。
對(duì)象持久化是永久存儲(chǔ)對(duì)象的一種技術(shù)。持久化機(jī)制包括基于OS的文件存儲(chǔ)機(jī)制、面向?qū)ο髷?shù)據(jù)庫以及關(guān)系數(shù)據(jù)庫等。
對(duì)象持久化的實(shí)現(xiàn),我們必須按照持久化機(jī)制所選擇的,來確定對(duì)象的持久化的方法。各種持久化方法有其各自的優(yōu)缺點(diǎn),不同的企業(yè)應(yīng)用應(yīng)該根據(jù)自身的系統(tǒng)機(jī)構(gòu)模式,選取不同的持久化策略。
2面向?qū)ο髷?shù)據(jù)庫
對(duì)如聲音、圖像、圖形、影像等這些數(shù)據(jù)類型多樣、結(jié)構(gòu)復(fù)雜的數(shù)據(jù)進(jìn)行存儲(chǔ)和處理,以及在此基礎(chǔ)之上的對(duì)數(shù)據(jù)庫的各種檢索、查詢、修改,傳統(tǒng)的數(shù)據(jù)庫都不能很好的支持。為了有效管理這些數(shù)據(jù),面向?qū)ο髷?shù)據(jù)庫系統(tǒng)應(yīng)運(yùn)而生。
面向?qū)ο髷?shù)據(jù)庫系統(tǒng)以面向?qū)ο笏枷氲幕咎卣鳛榛A(chǔ),支持對(duì)象數(shù)據(jù)模型。同時(shí),作為一個(gè)數(shù)據(jù)庫管理系統(tǒng),也具備數(shù)據(jù)庫管理系統(tǒng)的各項(xiàng)基本功能:
1)永久性,即對(duì)數(shù)據(jù)的永久保存;
2)并發(fā)事務(wù)控制,即保證多個(gè)用戶同時(shí)操作時(shí),數(shù)據(jù)能夠保持其完整和準(zhǔn)確;
3)故障恢復(fù)功能,能夠?qū)?shù)據(jù)庫從某一錯(cuò)誤或故障狀態(tài)恢復(fù)到正確狀態(tài)的功能;
4)獨(dú)立于應(yīng)用的非過程化查詢功能。面向?qū)ο髷?shù)據(jù)庫當(dāng)前以支持典型的選擇、連接、投影等查詢功能的OQL語言為其標(biāo)準(zhǔn)查詢語言。
此外,部分面向?qū)ο髷?shù)據(jù)庫系統(tǒng)還具有新的應(yīng)用領(lǐng)域所需要的特性,如版本分布式計(jì)算、長(zhǎng)事務(wù)和嵌套事務(wù)、模式演化、版本管理等。由此可以看出,在對(duì)象模型基礎(chǔ)上的面向?qū)ο髷?shù)據(jù)庫,對(duì)對(duì)象數(shù)據(jù)的管理遵循面向?qū)ο蟮幕舅枷?,而其豐富的功能,也逐漸使其成為對(duì)象持久化實(shí)施的優(yōu)勢(shì)技術(shù)。
3對(duì)象持久化技術(shù)Hibernate
3.1Hibernate框架介紹
所有的系統(tǒng)其基本配置功能都基本類似,因此,關(guān)鍵問題是如何提高系統(tǒng)的效率。持久化對(duì)象,其本質(zhì)是通過不斷地優(yōu)化數(shù)據(jù)庫的訪問策略,更有效地提高系統(tǒng)應(yīng)用性能。由于系統(tǒng)數(shù)據(jù)庫負(fù)擔(dān)主要來自對(duì)數(shù)據(jù)庫的頻繁調(diào)用,從而也連帶影響系統(tǒng)的執(zhí)行效率;同時(shí),當(dāng)數(shù)據(jù)庫的負(fù)載失衡嚴(yán)重時(shí),也將直接導(dǎo)致應(yīng)用系統(tǒng)的癱瘓。因此,對(duì)數(shù)據(jù)庫訪問策略的優(yōu)化思路,其基本出發(fā)點(diǎn)即減少訪問數(shù)據(jù)庫的次數(shù),減少數(shù)據(jù)庫的負(fù)載。
Hibernate作為現(xiàn)在最流行的輕量級(jí)持久化框架之一,是一個(gè)開源的ORM框架,同時(shí)它支持所有主流商業(yè)數(shù)據(jù)庫和開源數(shù)據(jù)庫,支持多種緩存機(jī)制,這些特點(diǎn)就為從框架級(jí)別提高系統(tǒng)數(shù)據(jù)操作效率提供了基礎(chǔ)。最重要的,Hibernate對(duì)JDBC對(duì)象的輕量級(jí)封裝,這在很大程度上為開發(fā)人員直接采用面向?qū)ο蟮姆椒ú僮鲾?shù)據(jù)庫提供了可行性。在Hibernate框架的支持下,開發(fā)人員對(duì)持久層的開發(fā)工作,完全可以直接應(yīng)用像關(guān)聯(lián)、繼承、多態(tài)、組合等這些Java中的基礎(chǔ)架構(gòu)功能。開發(fā)人員所要做的工作,不過是對(duì)新增加的一些配置文件進(jìn)行準(zhǔn)確定義,通過這些配置文件,大大節(jié)省了以往開發(fā)人員用戶手工硬編碼JDBC和SQL的時(shí)間,也實(shí)現(xiàn)了以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫。
3.2Hibernate框架邏輯簡(jiǎn)介
Hibernate作為一個(gè)開源框架,其為應(yīng)用系統(tǒng)提供持久化服務(wù)的實(shí)現(xiàn)機(jī)制,可用如圖1所示的示例圖進(jìn)行說明:
Hibernate從技術(shù)上是使用反射機(jī)制和運(yùn)行時(shí)字節(jié)碼來生成實(shí)現(xiàn)持久化的代碼。圖1清晰描述了其內(nèi)部邏輯,即通過定義XML文件實(shí)現(xiàn)javabean中的對(duì)象與數(shù)據(jù)庫中數(shù)據(jù)表數(shù)據(jù)項(xiàng)字段表的映射,以此實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表的操作,從而為應(yīng)用程序提供持久化服務(wù)。
3.3Hibernate框架的優(yōu)化策略
3.3.1數(shù)據(jù)庫連接池技術(shù)
數(shù)據(jù)庫連接池技術(shù),如今已是普遍系統(tǒng)開發(fā)所考慮的必備技術(shù)。對(duì)應(yīng)用連接池技術(shù)的應(yīng)用,因其應(yīng)用的普遍性,已可以將其視為應(yīng)用系統(tǒng)開發(fā)的基礎(chǔ)技術(shù)方案之一。
數(shù)據(jù)庫連接池技術(shù),其核心思想是使程序中所有數(shù)據(jù)庫訪問請(qǐng)求能夠復(fù)用在應(yīng)用啟動(dòng)時(shí)所建立的一定數(shù)量的數(shù)據(jù)庫連接,并將這些數(shù)據(jù)庫連接作為對(duì)象存儲(chǔ)在一個(gè)容器對(duì)象中。如此,省去程序每次訪問數(shù)據(jù)庫時(shí)需要建立連接的工作,不但改進(jìn)了對(duì)系統(tǒng)資源的浪費(fèi),同時(shí),也可觀地節(jié)省了程序的性能開銷。
3.3.2緩存管理機(jī)制
Hibernate框架結(jié)構(gòu),具備良好的緩存管理機(jī)制,以期優(yōu)化對(duì)象持久化的性能。
緩存技術(shù)的應(yīng)用,是提升系統(tǒng)性能的關(guān)鍵技術(shù)之一,其基本思想即是通過減少直接讀寫數(shù)據(jù)庫的次數(shù),來提升數(shù)據(jù)讀寫速度。之所以能夠如此考慮,是基于緩存技術(shù)的數(shù)據(jù)存儲(chǔ)機(jī)制。通常數(shù)據(jù)庫以硬盤作為存儲(chǔ)介質(zhì),而緩存則是以內(nèi)存作為存儲(chǔ)介質(zhì),數(shù)據(jù)來源于數(shù)據(jù)庫中數(shù)據(jù)的拷貝,而從內(nèi)存讀取數(shù)據(jù)的速度遠(yuǎn)比從硬盤讀取數(shù)據(jù)要快,由此,應(yīng)用程序在讀數(shù)據(jù)的時(shí)候便可以直接讀取緩存中的數(shù)據(jù),從而節(jié)省了數(shù)據(jù)讀取所需的硬件開銷。也因此,緩存技術(shù)成為減少數(shù)據(jù)庫直接訪問的基礎(chǔ)策略。
3.3.3優(yōu)化數(shù)據(jù)庫訪問代碼
Hibernate作為一種系統(tǒng)應(yīng)用開發(fā)框架技術(shù),在優(yōu)化系統(tǒng)性能方面的方案,也包括了通過使用提供的Query接口中的方法來提高效率。
iterate()方法在條件查詢應(yīng)用中有比較多的使用,而其本質(zhì)是在3.3.2節(jié)所述的緩存管理思想的基礎(chǔ)上來實(shí)現(xiàn)優(yōu)化。當(dāng)程序需要條件查詢時(shí),先對(duì)緩存進(jìn)行搜索,查找符合條件ID字段;若緩存中有符合條件的結(jié)果,就可以直接返回查詢結(jié)果集。另外,用iterate()方法代替list()方法,在某些情況下能夠減少select語句中的字段,降低了訪問數(shù)據(jù)庫時(shí)的數(shù)據(jù)量。
Hibernate從類似如上的一些細(xì)節(jié)上,一點(diǎn)一點(diǎn)改進(jìn)框架對(duì)系統(tǒng)性能的支持。
3.4Hibernate實(shí)現(xiàn)
作為企業(yè)應(yīng)用和關(guān)系數(shù)據(jù)庫之間的銜接件,使用Hibernate提供對(duì)象持久化服務(wù),具體是通過一個(gè)配置文件實(shí)現(xiàn)對(duì)Hibernate的配置和初始化。配置方式有多種,其中使用Hibernate.properties文件和Hibernate.cfg.xml,兩種配置是一樣的。
配置文件除完成連接驅(qū)動(dòng)類、用戶名、密碼、URL等的初始化外,Hibernate.cfg.xml文件還允許定義mappingresource,完成寫入持久化類的映射文件(類名.hbm.xml)。
一種完全面向?qū)ο蟮姆椒ň褪菓?yīng)用對(duì)象持久層的開發(fā)方法,在此開發(fā)方法中,一方面,要從問題域中抽象出類與對(duì)象;另一方面,由于對(duì)象持久層實(shí)現(xiàn)了持久化對(duì)象與存儲(chǔ)介質(zhì)的交互,使用一些成熟的持久層框架技術(shù),可以大幅提高系統(tǒng)開發(fā)效率和應(yīng)用性能。也正是基于此,當(dāng)前持久層框架技術(shù)已被廣泛應(yīng)用于各類企業(yè)應(yīng)用系統(tǒng)開發(fā)中。
Hibemate是很靈活和強(qiáng)大的,它自身提供了很多性能優(yōu)化策略,針對(duì)不同的數(shù)據(jù)庫和訪問量會(huì)有不同的優(yōu)化策略。
4總結(jié)
對(duì)象持久化雖然概念簡(jiǎn)單,但是它的實(shí)現(xiàn)可能會(huì)很復(fù)雜。所以應(yīng)根據(jù)實(shí)際情況,考慮是使用較簡(jiǎn)單的實(shí)現(xiàn)方法,還是采用復(fù)雜的實(shí)現(xiàn)方法使得系統(tǒng)易于維護(hù)和移植。應(yīng)用程序開發(fā)者也可以考慮使用第三方產(chǎn)品實(shí)現(xiàn)對(duì)象持久化,這樣做的費(fèi)用看起來可能比直接開發(fā)的費(fèi)用要高,但是它能確保持久化功能的完整實(shí)現(xiàn)。
該文即從對(duì)象持久化技術(shù)的架構(gòu)進(jìn)行探討,對(duì)其各項(xiàng)技術(shù)要點(diǎn)進(jìn)行分析,闡述其在企業(yè)應(yīng)用系統(tǒng)開發(fā)中的優(yōu)勢(shì),以期為企業(yè)應(yīng)用開發(fā)提供強(qiáng)健的技術(shù)基礎(chǔ)。
參考文獻(xiàn):
[1]鄧牧.Java對(duì)象持久化技術(shù)與Hibemate[J].計(jì)算機(jī)與現(xiàn)代化,2008(8).
[2]秦奕青.對(duì)象持久化常用方法研究[J].北京機(jī)械工業(yè)學(xué)院學(xué)報(bào),2003,18(1).
[3]薛鵬飛,陳國(guó)同.基于.NET平臺(tái)的對(duì)象持久化方法研究[J].泰州職業(yè)技術(shù)學(xué)院學(xué)報(bào),2007(4).
[4]王新輝,楊海明,葉瀟.基于Hibernate對(duì)象持久化技術(shù)的優(yōu)化策略分析與具體實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2007(10).