摘 要:由于目前關(guān)系數(shù)據(jù)庫是主流數(shù)據(jù)庫,因此持久層技術(shù)也就變得越來越重要,也越來越受到技術(shù)人員的重視。在java技術(shù)當(dāng)中,有較多的方法可以實現(xiàn)數(shù)據(jù)持久化,因此,持久層也是java程序當(dāng)中重要的內(nèi)容之一。本文主要在介紹數(shù)據(jù)持久層解決方案的基礎(chǔ)上,介紹Hibernate及其在Web應(yīng)用開發(fā)中的配置方法,并確立解決方案。
關(guān)鍵詞:Hibernate;數(shù)據(jù)持久層;java
中圖分類號:TP311.52
早在2006年,J2EE1.5標(biāo)準的發(fā)布,標(biāo)志著J2EE正式改名為java EE,在系統(tǒng)中數(shù)據(jù)持久層負責(zé)數(shù)據(jù)的添加、更新或刪除,從而簡稱為CRUD。目前來說,我國使用的數(shù)據(jù)庫主要指的是關(guān)系型數(shù)據(jù)庫,要提高數(shù)據(jù)速度以及訪問率,在設(shè)計的過程中對持久層的解決方案就顯得非常重要,該解決方案將會是整個系統(tǒng)的關(guān)鍵。目前關(guān)于持久層的解決方案有很多種,下面本文進行簡單介紹。
1 幾種數(shù)據(jù)持久層的解決方案
在關(guān)系數(shù)據(jù)庫中,持久層能夠為其提供映射解決方案,從而能夠有效彌補面向?qū)ο蠹夹g(shù)與關(guān)系數(shù)據(jù)庫兩者之間的差異。目前最常見的解決方案主要包括:JDBC、JDO以及EJB等。
JDBC是各種數(shù)據(jù)層之中最原始的方法。在進行應(yīng)用開發(fā)的過程中,工程人員可以使用DAO模式將數(shù)據(jù)訪問進行有效封裝,然后調(diào)用到其他層當(dāng)中。這種方法的好處是:數(shù)據(jù)的運行速度較快,工作效率較高。然而由于使用DAO模式,因此也容易將DAO對象與SQL語言連著相耦合,從而導(dǎo)致在大型項目的開發(fā)過程中難以進行維護工作。盡管具有一定的缺點,但使用JDBC對數(shù)據(jù)持久層進行訪問,仍然是目前較為常用的一種系統(tǒng)開發(fā)方式。
JDO則是目前最新的持久性規(guī)范,它能夠為面向?qū)ο筇峁┏志脭?shù)據(jù)儲存。在該方法的支持下,開發(fā)者可以使用一般對象對持久數(shù)據(jù)進行儲存,且支持批量數(shù)據(jù)的儲存。然而該方法也存在一定的缺點:目前的國內(nèi)還沒有具體的銷售,且因為它并不是一個輕量級封裝,在一定程度上增加了開發(fā)者的負擔(dān),在進行程序調(diào)試的過程中經(jīng)常遇到各種各樣的苦難和麻煩,另外,由于JDO的標(biāo)準較為參差,容易導(dǎo)致產(chǎn)品之間的不兼容。
EJB是javaEE平臺當(dāng)中用作進行標(biāo)示或訪問的工具之一。它具有方便快捷的優(yōu)點,然而在進行使用的過程中,程序人員需要額外購買實體容器,且在使用的過程中,需要使用到不同的服務(wù)器,也要對部署描述進行重新書寫,因此在使用時會給人不方便的感覺。此外,在不同的服務(wù)器應(yīng)用下,會給應(yīng)用系統(tǒng)帶來相當(dāng)大的困難。
2 利用Hibernate的JAVAEE數(shù)據(jù)持久層的解決方案
2.1 Hibernate的簡介和工作原理介紹。Hibernate主要是指對象關(guān)系映射框架,它是由一個開放源代碼構(gòu)成的。能夠有效對JDBC進行對象封裝,從而能夠讓程序員更加隨心所欲地利用編程思維對數(shù)據(jù)庫進行控制。Hibernate不僅僅有效提供JAVA類與數(shù)據(jù)表之間的映射,還能夠為程序員提供數(shù)據(jù)查詢。相對于JDBC或SQL等手動操作數(shù)據(jù)庫相比,Hibernate具有一定的自動化,并有效減少工作量。此外,由于Hibernate可以使用代理模式進行工作,從而有效簡化載入類的過程,并減少提取代碼的編寫量,從而提高程序開發(fā)時間和效率。目前,Hibernate已經(jīng)成功實現(xiàn)與Web服務(wù)器進行良好的集成,并支持大部分數(shù)據(jù)庫服務(wù)器,因此具有一定的通用性。
在沒有Hibernate的情況下,JDBC成為java語言數(shù)據(jù)的鏈接口,并具有較高的工作效率和較好的性能。然而目前隨著應(yīng)用系統(tǒng)的不斷擴大,數(shù)據(jù)表和數(shù)據(jù)之間的關(guān)系變得越來越復(fù)雜,JDBC代碼變得更加復(fù)雜,從而影響了整個系統(tǒng)的性能。而Hibernate的出現(xiàn),有效實現(xiàn)了以對象關(guān)系映射的方式進行操作,應(yīng)用程序主要通過持久化對象(PO)對Hibernate API進行訪問,從而對Hibernate所使用的數(shù)據(jù)庫資源進行有效配置。
此外,Hibernate能夠提供多中運行方式,并且在一些輕量系統(tǒng)當(dāng)中該應(yīng)用程序能夠直接實現(xiàn)與JDBC之間相連接,并進行事務(wù)管理。此外,在全面解決體系的過程中,所有基層的JDBC都被抽象化了。而Hibernate則能夠定義查詢語言(HQL),還能夠?qū)鹘y(tǒng)的SQL語法進行兼容,因此具有很強的靈活性,也正因此,它能夠與多種Web服務(wù)器進行集成,并支持應(yīng)用大部分數(shù)據(jù)庫服務(wù)器。
2.2 利用Hibernate建立應(yīng)用。要提高辦公的工作效率,對Hibernate進行有效配置是非常重要的。下文對Hibernate有效配置方案進行簡單介紹:
2.2.1 對Hibernate進行配置工作。在src目錄下創(chuàng)建配置文件,并命名為hibernate.cfg.xml,工程人員要將其路徑配置到應(yīng)用類路徑當(dāng)中,并完善對Hibernate的配置工作。hibernate.cfg.xml配置文件主要通過三個方面組成,其中包括Hibernate連接數(shù)據(jù)庫、生成模式以及特定數(shù)據(jù)庫信息等。因此,當(dāng)工作人員要將數(shù)據(jù)庫內(nèi)的變動反射到應(yīng)用當(dāng)中時,可以對配置文件內(nèi)的屬性值進行修改。
2.2.2 映射文檔的創(chuàng)建工作。映射文檔的主要作用是對持久數(shù)據(jù)進行有效定義,因此對于每個持久對象或以class_name來命名的文件來講,建立映射文檔是非常重要的。它設(shè)置的正確與否與Hibernate持久化服務(wù)是否正常運行有著必要聯(lián)系,同時也嚴重影響著系統(tǒng)數(shù)據(jù)庫的性能。映射文檔代表了持久化類與數(shù)據(jù)庫之間的關(guān)系,其中包括映射字段以及相關(guān)字段。此外,映射文件還可以說明持久化類之間的關(guān)系。舉個例子:母女之間的關(guān)系存在一對多或多對一,由此原理可以得出關(guān)系型數(shù)據(jù)庫表的關(guān)系。
2.2.3 數(shù)據(jù)庫模式生成。數(shù)據(jù)庫模式生成主要通過Hibernate來實現(xiàn),下面對其執(zhí)行命令進行詳細介紹:Java-cp classpath net.sf.hibernate.t001.hbm2ddoptions mapping_files。上述命令能夠有效提供恰當(dāng)?shù)臄?shù)值,并根據(jù)其生成的模式外形。
2.2.4 對數(shù)據(jù)庫進行操作。程序人員可以根據(jù)Hibernate完成對數(shù)據(jù)庫方面的鏈接,并能夠同時提供對外接口。當(dāng)Hibernate核心接口(Sessionfactory)獲取之后,便能有效進行會話(session),并進行查詢(guery)、加載(load)、嵌入(insert)、刪除(deiete)。
2.2.5 Hibernate代碼的初始化運行。程序人員在進行初始化運行時,應(yīng)該要嚴格按照下列步驟進行,下文進行詳細介紹:(1)在進行啟動時應(yīng)該使用net.sf.hibernate.cfg對象對net.sf.hibernate進行獲??;(2)調(diào)用Session Factory對象上的open Session(),并打開net.sf.hibernate.Session;(3)當(dāng)遇到要保存的對象時,應(yīng)該關(guān)閉session(會話);(4)當(dāng)要打開net.sf.hibernate時,程序人員可以利用Hibernate核心接口對象上的OpenSessionInView的方式來打開。此外,值得注意的是,在進行數(shù)據(jù)庫報表的編程中,要考慮的主要包括程序運行的效率以及科學(xué)性,其中包括:在進行數(shù)據(jù)更新的同時,要避免對系統(tǒng)本身的數(shù)據(jù)邏輯進行更改;對數(shù)據(jù)字典庫當(dāng)中的數(shù)據(jù)元素不得隨意更改;報表開發(fā)會涉及眾多的數(shù)據(jù)選擇,保持程序的運行效率非常重要,因此程序邏輯必須要具有科學(xué)性;可以使用附加技術(shù)對標(biāo)準程序進行動態(tài)調(diào)用,減少標(biāo)準系統(tǒng)的升級影響。通過有效地選擇數(shù)表編程,考慮邏輯性和科學(xué)性,并換位思考問題,從而得出更好的解決方案。
3 結(jié)束語
Hibernate是數(shù)據(jù)持久化對象的其中一種,同時也是一個輕量級的映射框架。利用Hibernate數(shù)據(jù)持久層設(shè)計具有眾多優(yōu)點,主要包括:第一,利用Hibernate進行設(shè)計,能有效減少SQL的使用量,并減少了代碼數(shù)量,提高系統(tǒng)的開發(fā)效率與維護情況。第二,由于Hibernate屬于輕量級映射框架,且具有開放性的特點,在進行開發(fā)時,程序人員可以根據(jù)自身需要進行定制或修改源代碼,具有較強的靈活性。第三,Hibernate能夠有效提高數(shù)據(jù)訪問的效率。
Hibernate有效地推動了java對象模型的發(fā)展,通過利用Hibernate的數(shù)據(jù)持久層的解決方案,程序人員不必對數(shù)據(jù)庫邏輯進行過多考慮,從而有效實現(xiàn)業(yè)務(wù)邏輯,更加科學(xué)、合理地模塊劃分。
參考文獻:
[1]牛變玲.Java技術(shù)中數(shù)據(jù)的持久化實現(xiàn)及對比[J].科技情報開發(fā)與經(jīng)濟.2010(06).
[2]杜玲玲.基于Hibernate框架的數(shù)據(jù)持久化應(yīng)用開發(fā)[J].微計算機信息,2008(06).
作者簡介:戴云松,男,云南建水人,總經(jīng)理,高級工程師,碩士學(xué)位。
作者單位:廣州耘趣網(wǎng)絡(luò)科技有限公司,廣州 510030