J2EE項(xiàng)目實(shí)訓(xùn)Hibernate框架技術(shù)——第1章 Hibernate OR Mapping技術(shù)基礎(chǔ)(第1部分)_第1頁
J2EE項(xiàng)目實(shí)訓(xùn)Hibernate框架技術(shù)——第1章 Hibernate OR Mapping技術(shù)基礎(chǔ)(第1部分)_第2頁
J2EE項(xiàng)目實(shí)訓(xùn)Hibernate框架技術(shù)——第1章 Hibernate OR Mapping技術(shù)基礎(chǔ)(第1部分)_第3頁
J2EE項(xiàng)目實(shí)訓(xùn)Hibernate框架技術(shù)——第1章 Hibernate OR Mapping技術(shù)基礎(chǔ)(第1部分)_第4頁
J2EE項(xiàng)目實(shí)訓(xùn)Hibernate框架技術(shù)——第1章 Hibernate OR Mapping技術(shù)基礎(chǔ)(第1部分)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料第一章 hibernate o/r mapping技術(shù)基礎(chǔ)(第1/3部分)hibernate 框架是一個(gè)面向java 開發(fā)平臺的對象/ 關(guān)系數(shù)據(jù)庫的映射工具,并且是開源的o/r mapping框架。它不僅提供了從java類到數(shù)據(jù)庫表之間的雙向的映射,也提供了數(shù)據(jù)查詢、數(shù)據(jù)修改和恢復(fù)等機(jī)制,并且還提供了對系統(tǒng)性能優(yōu)化的各種技術(shù)。從而可以大幅度減少開發(fā)時(shí)開發(fā)者直接編寫和使用sql 語句和jdbc api處理數(shù)據(jù)訪問的時(shí)間。另外,hibernate框架可以應(yīng)用在能夠使用jdbc的各種場合,既可以在j2se的應(yīng)用程序中被應(yīng)用,也可以在j2ee的w

2、eb應(yīng)用環(huán)境中被使用。本章將系統(tǒng)地介紹hibernate框架中的o/r mapping(對象/關(guān)系映射)特性、系統(tǒng)架構(gòu)以及與jdbc在應(yīng)用方面的主要區(qū)別,hibernate框架中的hql(hibernate查詢語言)等方面的內(nèi)容。同時(shí)再通過一個(gè)基于hibernate框架技術(shù)實(shí)現(xiàn)的、并且對數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行操作訪問的j2se的應(yīng)用程序?qū)嵗?,來讓讀者初步了解、體驗(yàn)并最終掌握如何應(yīng)用hibernate框架的o/r mapping框架技術(shù)來實(shí)現(xiàn)應(yīng)用系統(tǒng)的持久層的設(shè)計(jì)、開發(fā)和編程實(shí)現(xiàn)。1.1 hibernate框架是一個(gè)提供數(shù)據(jù)庫服務(wù)的中間件1.1.1 hibernate框架中的o/r mapping

3、技術(shù)1、o/r mapping(對象/關(guān)系映射)技術(shù)(1)實(shí)體域?qū)ο蠹坝驅(qū)ο笾g的關(guān)系應(yīng)用系統(tǒng)中的實(shí)體域?qū)ο笾饕侵冈趹?yīng)用系統(tǒng)中涉及代表人、地點(diǎn)、事物或其它的概念的一些名詞術(shù)語。比如在應(yīng)用系統(tǒng)的業(yè)務(wù)領(lǐng)域中的涉及的客戶、訂單、商品等方面的名詞都可以看成為該應(yīng)用系統(tǒng)中的實(shí)體域?qū)ο?。從面向?qū)ο螅╫bject-oriented)的角度來看應(yīng)用系統(tǒng)中的各個(gè)實(shí)體域?qū)ο髸r(shí),一般都存在有如下形式的關(guān)系:關(guān)聯(lián)(association)、依賴(dependency)、聚集(aggregation)或者組合(composition)、一般化(generalization)等方面的關(guān)系。(2)關(guān)系型數(shù)據(jù)庫系統(tǒng)在目前的

4、企業(yè)應(yīng)用系統(tǒng)開發(fā)中所使用的數(shù)據(jù)庫系統(tǒng)仍然為關(guān)系型數(shù)據(jù)庫系統(tǒng),其中所存儲的是關(guān)系型的數(shù)據(jù),并且還能夠保存這些關(guān)系數(shù)據(jù)的靜態(tài)結(jié)構(gòu)。但在關(guān)系型數(shù)據(jù)庫系統(tǒng)中并不提供對面向?qū)ο笾械乃姆N關(guān)系的支持,如何將實(shí)體域?qū)ο蟊旧淼膶傩灾狄约案鱾€(gè)實(shí)體域?qū)ο笾g的關(guān)系也能夠持久化,是目前在企業(yè)應(yīng)用系統(tǒng)開發(fā)中所應(yīng)該解決的一個(gè)問題。(3)hibernate框架是一個(gè)面向java 開發(fā)平臺的對象/關(guān)系數(shù)據(jù)庫映射工具它能夠把java類(該類為后面所提及的持久類)中的各個(gè)成員屬性映射到對應(yīng)的關(guān)系型數(shù)據(jù)庫的表中的字段中,當(dāng)然也可以將數(shù)據(jù)庫表中的各個(gè)字段的數(shù)據(jù)值再次映射回java中的對象的成員屬性。在hibernate框架的系統(tǒng)內(nèi)部

5、是采用了xml技術(shù)、java reflection(反射)等方面的技術(shù)來實(shí)現(xiàn)上面的對象/關(guān)系映射功能。下面的圖1.1所示為hibernate框架中的o/r mapping實(shí)現(xiàn)的基本原理。圖1.1 hibernate 中的o/r mapping技術(shù)hibernate框架系統(tǒng)不僅為開發(fā)者提供了從java類到數(shù)據(jù)表的映射,也提供了對數(shù)據(jù)庫表中的數(shù)據(jù)查詢、修改等方面的操作和恢復(fù)等方面的技術(shù)的支持。這樣不僅能夠大幅度減少開發(fā)時(shí)人工編寫和使用sql 語句、以及編程應(yīng)用jdbc api 處理數(shù)據(jù)的開發(fā)時(shí)間,也提高了應(yīng)用系統(tǒng)對后臺的數(shù)據(jù)庫訪問的性能。2、hibernate是一個(gè)開放源代碼的對象/關(guān)系映射框架(

6、1)它倡導(dǎo)以面向?qū)ο螅╫o)的方式來操作訪問數(shù)據(jù)庫表中的數(shù)據(jù)它對jdbc進(jìn)行了非常輕量級的對象封裝,使得java程序員可以使用面向?qū)ο缶幊谭椒▉聿僮髟L問目前的各種企業(yè)級的數(shù)據(jù)庫系統(tǒng)。從而達(dá)到在應(yīng)用系統(tǒng)的開發(fā)實(shí)現(xiàn)中,系統(tǒng)的各個(gè)部分開發(fā)(包括持久層)時(shí)都統(tǒng)一地應(yīng)用面向?qū)ο蠓椒ā?(2)hibernate框架可以應(yīng)用在任何使用jdbc的應(yīng)用場合hibernate框架可以應(yīng)用在任何使用jdbc的場合,因此它既可以在java的j2se應(yīng)用環(huán)境中被使用,當(dāng)然也可以在j2ee的web應(yīng)用環(huán)境中被使用。因此,在應(yīng)用的環(huán)境方面還是比較廣。另外,也支持目前各種主流得數(shù)據(jù)庫系統(tǒng)(包括商業(yè)和開源的數(shù)據(jù)庫),并且對這些

7、數(shù)據(jù)庫系統(tǒng)的兼容性也比較高。對熟悉java jdbc技術(shù)的程序員來說,肯定都寫過類似下面的這樣的jdbc的數(shù)據(jù)訪問的代碼?!纠?-1】 常規(guī)的jdbc數(shù)據(jù)訪問的代碼示例try stmt=con.createstatement(); rs=stmt.executequery(select * from student); metadata = rs.getmetadata(); for(int column = 0; column metadata.getcolumncount(); column+)system.out.print(metadata.getcolumnname(column+1

8、)+t); system.out.println(); while(rs.next()for (int i = 1; i = metadata.getcolumncount(); i+) system.out.print(rs.getobject(i)+t); system.out.println(); stmt.close(); con.close(); catch(sqlexception e) 上面的代碼不僅復(fù)雜,同時(shí)也比較重復(fù)。那么能否對此種形式的代碼或者類似功能的實(shí)現(xiàn)能夠以模板程序的方式來加以實(shí)現(xiàn)呢?而hibernate框架為開發(fā)人員提供了類似的功能模板!這樣將為開發(fā)人員大大地簡化了

9、應(yīng)用系統(tǒng)持久層的開發(fā)實(shí)現(xiàn)。3、應(yīng)用系統(tǒng)的的持久層為了使讀者能夠深入地了解hibernate框架系統(tǒng)的工作原理,以及是如何簡化應(yīng)用系統(tǒng)中的持久層的開發(fā)實(shí)現(xiàn)。有必要了解一下什么是持久化、持久層等方面的概念。(1)什么是持久化所謂的持久化就是將應(yīng)用系統(tǒng)中的數(shù)據(jù)(一般是指應(yīng)用系統(tǒng)在運(yùn)行的過程中在內(nèi)存中所產(chǎn)生的一些臨時(shí)的數(shù)據(jù))保存到可掉電式存儲設(shè)備(如磁盤文件)中,以便供以后能夠再次被使用,而持久化的實(shí)現(xiàn)過程在大多數(shù)情況下是通過各種關(guān)系數(shù)據(jù)庫系統(tǒng)來完成的。(2)持久層特指在應(yīng)用系統(tǒng)的體系架構(gòu)設(shè)計(jì)中的某一邏輯層,由于該層的職責(zé)是專著于實(shí)現(xiàn)應(yīng)用系統(tǒng)中的各種數(shù)據(jù)的持久化功能。(3)在系統(tǒng)的體系架構(gòu)設(shè)計(jì)中為什么

10、要獨(dú)立出一個(gè)持久層?由于在實(shí)際應(yīng)用系統(tǒng)中的數(shù)據(jù)持久化的目標(biāo)設(shè)備和數(shù)據(jù)庫系統(tǒng)是多樣化的(運(yùn)行平臺、持久化的實(shí)現(xiàn)等方面),為了能夠使應(yīng)用系統(tǒng)的上層的組件特別是業(yè)務(wù)層組件與目標(biāo)持久化的設(shè)備相互隔離,應(yīng)用系統(tǒng)應(yīng)該有一個(gè)相對獨(dú)立的完成數(shù)據(jù)持久化邏輯的邏輯層實(shí)現(xiàn)。而該邏輯層一般稱為應(yīng)用系統(tǒng)中的持久層,并且該持久層是與其它的各層是相互隔離的。而hibernate框架的設(shè)計(jì)者正是基于此目的,為開發(fā)者簡化并輔助解決應(yīng)用系統(tǒng)中的數(shù)據(jù)持久化的邏輯層實(shí)現(xiàn)中有關(guān)的各種復(fù)雜的技術(shù)問題。4、為什么要應(yīng)用hibernate框架技術(shù)(1)對設(shè)計(jì)人員達(dá)到持久層設(shè)計(jì)上的解耦 ,其解耦合的主要設(shè)計(jì)目標(biāo)體現(xiàn)在如下兩方面1) 達(dá)到業(yè)務(wù)邏

11、輯與數(shù)據(jù)邏輯相分離(業(yè)務(wù)人員不需要考慮數(shù)據(jù)表的邏輯結(jié)構(gòu))2) 達(dá)到數(shù)據(jù)訪問邏輯與物理數(shù)據(jù)庫的結(jié)構(gòu)相分離(數(shù)據(jù)訪問邏輯的開發(fā)者不再關(guān)心不同的物理數(shù)據(jù)庫的差異性)另外從設(shè)計(jì)上來看,hibernate框架通過提供對集合及集合的包含、繼承和關(guān)聯(lián)關(guān)系的支持,使開發(fā)人員能夠建立一個(gè)足夠“復(fù)雜”的對象模型。并借助于hibernate框架,將應(yīng)用系統(tǒng)中的域模型與應(yīng)用系統(tǒng)中的數(shù)據(jù)模型很好地映射對應(yīng)起來;并且能夠使開發(fā)者開發(fā)出跨數(shù)據(jù)庫的應(yīng)用系統(tǒng),而不同的物理數(shù)據(jù)庫之間的差異性交由hibernate框架來具體解決。(2)對持久層的編程實(shí)現(xiàn)人員達(dá)到提高了編碼的效率,同時(shí)也提高了對數(shù)據(jù)庫訪問的性能hibernate框架

12、是一個(gè)orm工具,它不僅僅在于實(shí)現(xiàn)了數(shù)據(jù)庫訪問性能優(yōu)化和與數(shù)據(jù)庫交互的常用操作(crud,也就是增、刪、改、查等方面的功能),還將數(shù)據(jù)表與對象進(jìn)行了關(guān)聯(lián)、并提供對面向?qū)ο笾械膶ο笾g的關(guān)聯(lián)、組合和繼承等形式的關(guān)系映射支持,讓開發(fā)者可以脫離數(shù)據(jù)表,而直接針對數(shù)據(jù)對象來實(shí)現(xiàn)與數(shù)據(jù)庫之間的交互和操作。開發(fā)者不再需要用字符串去描述sql語句中的數(shù)據(jù)庫表中各個(gè)字段,不再需要用一個(gè)個(gè)“+”號去組裝系統(tǒng)中的各種形式的sql語句。下面為傳統(tǒng)的jdbc技術(shù)實(shí)現(xiàn)時(shí)的數(shù)據(jù)庫訪問代碼中所涉及的sql語句。insert into userinfo (username, userpaaaword, usertype) v

13、alues(+ username +, + userpaaaword + , + usertype + )而如果開發(fā)者借助hibernate框架來實(shí)現(xiàn)上面類似的數(shù)據(jù)添加功能,則不再需要寫復(fù)雜的sql語句,而只需要采用下面形式的代碼:session.save(userinfopo);從兩種實(shí)現(xiàn)方式的代碼比較中可以看出,數(shù)據(jù)庫表可以象跟面向?qū)ο箢I(lǐng)域中的對象那樣一樣被操作,這樣的數(shù)據(jù)訪問代碼不僅顯得更加簡潔,而且可讀性也得以提高。最終達(dá)到將面向?qū)ο蠹夹g(shù)中的類之間的關(guān)聯(lián)、繼承和組合等關(guān)系應(yīng)用到關(guān)系型的數(shù)據(jù)庫系統(tǒng)中。另外,開發(fā)者在一般的應(yīng)用場合下可以不再需要考慮或者很少考慮與數(shù)據(jù)庫交互的性能問題,如連接

14、池、數(shù)據(jù)緩存、本地事務(wù)和分布式事務(wù)等具體的技術(shù)實(shí)現(xiàn)。因?yàn)檫@些復(fù)雜的技術(shù)在hibernate框架中都提供了具體功能實(shí)現(xiàn)和支持:數(shù)據(jù)讀取和更新、事務(wù)管理、數(shù)據(jù)連接池、查詢和實(shí)體關(guān)系管理等。5、hibernate框架與jdbc 技術(shù)之間的對比(1)hibernate框架能夠取代jdbc并進(jìn)一步完善和擴(kuò)展了jdbc的功能hibernate框架是對jdbc的輕量級的對象封裝,它是一個(gè)獨(dú)立的對象持久層框架,不依賴于某種j2ee應(yīng)用服務(wù)器容器的具體實(shí)現(xiàn)和支持。hibernate框架可以用在jdbc可以使用的場合,因此從某種意義上來說,hibernate框架不僅能夠取代jdbc,并且還進(jìn)一步完善和擴(kuò)展了jdb

15、c的功能。 在下面的圖1.2中的左面流程顯示的是在java應(yīng)用中是如何通過jdbc api來訪問物理數(shù)據(jù)庫系統(tǒng)的,而右面流程則是表示在java應(yīng)用中是如何通過hibernate 框架api來訪問物理數(shù)據(jù)庫系統(tǒng)。從圖中明顯地可以看到,hibernate框架是對jdbc的api的對象包裝,從而能夠使得java應(yīng)用以面向?qū)ο蟮姆绞絹聿僮骱驮L問數(shù)據(jù)庫系統(tǒng)。java程序(j2se 應(yīng)用程序或者j2ee web系統(tǒng))java jdbc api(如conection、preparedstatement和resultset等)物理數(shù)據(jù)庫系統(tǒng)java程序(j2se 應(yīng)用程序或者j2ee web系統(tǒng))物理數(shù)據(jù)庫系

16、統(tǒng)hibernate api(如session、sessionfactory、transaction和query等)java jdbc api(如conection、preparedstatement和resultset等)圖1.2 hibernate 框架和jdbc技術(shù)的數(shù)據(jù)訪問技術(shù)的對比(2)hibernate框架是一個(gè)和jdbc密切相關(guān)的持久層框架從上面的圖1.2所示中也能夠發(fā)現(xiàn)hibernate框架是一個(gè)和jdbc密切關(guān)聯(lián)的框架,所以hibernate框架的兼容性和jdbc驅(qū)動程序、和數(shù)據(jù)庫都有一定的關(guān)系,但是和使用它的java程序、j2ee應(yīng)用服務(wù)器沒有任何關(guān)系,也不存在兼容性問題。

17、這將可以使開發(fā)人員開發(fā)出與物理數(shù)據(jù)庫系統(tǒng)無關(guān)的應(yīng)用系統(tǒng)。(3)hibernate框架不是直接代替ejb組件技術(shù)而只是優(yōu)化ejb由于hibernate框架是做為jdbc的替代者出現(xiàn)的,因此開發(fā)者不能將它直接和j2ee ejb組件技術(shù)中的實(shí)體bean組件(entitybean)做對比。也就是說hibernate框架不是直接代替ejb組件技術(shù)的,而只是優(yōu)化ejb組件技術(shù),這樣將使得應(yīng)用系統(tǒng)的開發(fā)者在輕量級的j2ee容器中也能夠應(yīng)用j2ee ejb組件技術(shù)中有關(guān)的“o/r mapping”技術(shù)。6、什么時(shí)候使用hibernate 框架(1)開發(fā)者自己沒有數(shù)據(jù)持久層開發(fā)的技術(shù)能力比如在數(shù)據(jù)緩存、連接池管

18、理、多數(shù)據(jù)庫支持等等方面,本地事務(wù)和分布式事務(wù)等具體的技術(shù)實(shí)現(xiàn)。hibernate框架在上述方面有比較出色的表現(xiàn)和支持;另外hibernate框架還為開發(fā)者提供了一套成熟的o/r mapping的模型,應(yīng)用它將能夠在短時(shí)間內(nèi)構(gòu)建適合業(yè)務(wù)需求的數(shù)據(jù)持久層的解決方案。當(dāng)然,前提是應(yīng)用系統(tǒng)的開發(fā)者要對hibernate框架技術(shù)本身有足夠的了解和使用的開發(fā)能力和經(jīng)驗(yàn)。(2)對jdbc底層api中的技術(shù)實(shí)現(xiàn)的細(xì)節(jié)不甚熟悉者由于hibernate框架實(shí)現(xiàn)了對jdbc底層的調(diào)用封裝,這樣將能夠統(tǒng)一對不同類型的數(shù)據(jù)庫系統(tǒng)的支持。因此,當(dāng)開發(fā)者在缺乏對jdbc底層調(diào)用的技術(shù)細(xì)節(jié)的深入了解時(shí),使用hibernat

19、e框架則可以達(dá)到事半功倍的效果。(3)在團(tuán)隊(duì)開發(fā)中希望能夠統(tǒng)一應(yīng)用系統(tǒng)中的持久層開發(fā)的技術(shù)實(shí)現(xiàn)從技術(shù)分類來看,一般是把hibernate歸類為o/r mapping方面的框架。因此,既然是框架,那么如果項(xiàng)目團(tuán)隊(duì)中的各個(gè)成員對這個(gè)框架比較熟悉的話,那么開發(fā)方將可以統(tǒng)一開發(fā)團(tuán)隊(duì)中的開發(fā)實(shí)現(xiàn)工具和平臺,從而減少開發(fā)人員之間溝通的頻率和出現(xiàn)協(xié)調(diào)配合方面的錯(cuò)誤,同時(shí)也能夠促進(jìn)協(xié)同開發(fā)和數(shù)據(jù)共享。(4)希望應(yīng)用系統(tǒng)的持久層的具體實(shí)現(xiàn)能夠不依賴于某種特定的物理數(shù)據(jù)庫系統(tǒng)因?yàn)殚_發(fā)者在應(yīng)用系統(tǒng)的開發(fā)中經(jīng)常需要追求的一個(gè)目標(biāo)是,希望所開發(fā)出的應(yīng)用系統(tǒng)或者軟件產(chǎn)品能夠滿足不同的物理數(shù)據(jù)庫系統(tǒng)的差別所帶來的問題,也就

20、是所開發(fā)出的應(yīng)用系統(tǒng)是能夠適用于多種類型的企業(yè)級數(shù)據(jù)庫的通用產(chǎn)品,而不是開發(fā)者需要針對不同的物理數(shù)據(jù)庫來提供多個(gè)不同的版本的產(chǎn)品。因?yàn)?,hibernate框架能夠幫助開發(fā)人員屏蔽各種物理數(shù)據(jù)庫系統(tǒng)的差異性。根據(jù)hibernate框架中所提供的技術(shù)文檔的介紹,目前hibernate框架所能夠支持的數(shù)據(jù)源包括:hypersonicsql、postgresql、db2、mysql、oracle、sybase、mckoi sql、sap db、ms sql server、jsql driver、jturbo driver、weblogic driver、純java驅(qū)動程序等各種商業(yè)和開源的數(shù)據(jù)庫系統(tǒng)。

21、當(dāng)所開發(fā)出的應(yīng)用系統(tǒng)需要從一種運(yùn)行環(huán)境移植到另一種應(yīng)用環(huán)境中時(shí),開發(fā)者只需要修改hibernate框架中涉及數(shù)據(jù)庫連接方面的配置文件(如hibernate.cfg.xml)和相關(guān)的持久類的映射文件,而不需要修改或者只需要修改極少量的java源代碼。1.1.2 hibernate框架系統(tǒng)1、下載hibernate框架系統(tǒng)包hibernate框架的設(shè)計(jì)者gavin king,gavin king是hibernate框架的作者,ejb3.0專家委員會成員,jboss核心成員之一。hibernate誕生在2001年11月,并且是sourceforge的一個(gè)子項(xiàng)目,讀者可以從hibernate框架的官方

22、網(wǎng)站/(hibernate框架的中文網(wǎng)站是/)或者上面獲得下載的連接。下面的圖1.3中顯示了hibernate框架的官方網(wǎng)站所提供的hibernate框架系統(tǒng)包文件下載的頁面。圖1.3 hibernate框架的官方網(wǎng)站的hibernate系統(tǒng)包文件下載的頁面2、hibernate框架的系統(tǒng)架構(gòu)下面的圖1.4顯示了hibernate框架的工作原理,從該圖中很清楚地了解到hibernate框架是在物理數(shù)據(jù)庫之上利用一些配置文件如hibern

23、perties(現(xiàn)在改變?yōu)閔ibernate.cfg.xml文件),xml mapping(映射文件)等來為應(yīng)用系統(tǒng)提供數(shù)據(jù)持久化方面的服務(wù)。同時(shí)達(dá)到將應(yīng)用系統(tǒng)的持久層與不同的物理數(shù)據(jù)庫系統(tǒng)相互隔離開。圖1.4 hibernate的工作原理圖hibernate框架是java應(yīng)用和關(guān)系數(shù)據(jù)庫之間的橋梁,它負(fù)責(zé)java對象和關(guān)系數(shù)據(jù)庫之間的映射。hibernate框架在內(nèi)部封裝了通過jdbc訪問數(shù)據(jù)庫的各種操作,同時(shí)向上層的應(yīng)用系統(tǒng)提供了面向?qū)ο蟮臄?shù)據(jù)訪問api。最終使得java程序員能夠以面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫系統(tǒng)。3、hibernate 框架是輕量級的o/r mapping框

24、架(1)持久類可以為普通的javabean組件類輕量級的o/r mapping框架意味著所開發(fā)出的應(yīng)用系統(tǒng)中的持久類對象(persistence object)可以是一種普通的javabean(pojo,plain ordinary java object),因此應(yīng)用系統(tǒng)中的持久類對象將不依賴于hibernate框架的api并能夠與hibernate框架之間保持一定的隔離性。請見下面的【例1-2】所示的ebook類的代碼定義,ebook類沒有從hibernate框架的某個(gè)基類繼承或者實(shí)現(xiàn)hibernate框架中的某個(gè)接口。因此,該ebook類為一個(gè)普通的javabean組件類?!纠?-2】前面

25、的圖1.1中所示的數(shù)據(jù)庫表ebook所對應(yīng)的持久類ebook的定義package com.px1987.hexample.pobject;public class ebook private integer id; private string ebookname; private char ebookkind; private float ebookprice;public ebook() public integer getid() return id; private void setid(integer id) this.id = id; public string getebookn

26、ame() return ebookname; public void setebookname(string newebookname) this.ebookname = newebookname; public char getebookkind() return ebookkind; public void setebookkind(char newebookkind) this.ebookkind = newebookkind; public float getebookprice() return ebookprice; public void setebookprice(float

27、 newebookprice) this.ebookprice = newebookprice; public boolean equals(object other) if (this = other) return true; if ( !(other instanceof ebook) ) return false; return true; (2)持久類能夠在容器之外開發(fā)和執(zhí)行輕量級的o/r mapping框架也意味著應(yīng)用系統(tǒng)中的持久類能夠脫離容器的環(huán)境,并能夠在容器之外開發(fā)和執(zhí)行。因此,hibernate框架不僅可以應(yīng)用于j2ee開發(fā)環(huán)境,也能夠應(yīng)用于j2se的開發(fā)環(huán)境中。同時(shí)由于能

28、夠脫離容器的環(huán)境,這將有助于開發(fā)人員對基于它而開發(fā)產(chǎn)生的持久層中的各種組件進(jìn)行單元測試。下面的圖1.5中顯示的是一個(gè)對基于hibernate框架的dao組件的單元測試的結(jié)果。圖1.5 對基于hibernate框架的dao組件的單元測試的結(jié)果4、hibernate 框架api中包含的一些主要的類(1)hibernate框架的 api 接口大致可以分為以下幾種類型1) 一些被用戶的應(yīng)用程序調(diào)用的,用來完成基本的創(chuàng)建、讀取、更新、刪除操作以及查詢操作的接口。這些接口是hibernate框架實(shí)現(xiàn)用戶程序的商業(yè)邏輯的主要接口,它們主要包括session、transaction和query等方面的接口。2

29、) hibernate框架用來讀取諸如映射表這類配置文件的類,典型的代表有configuration類。3) 回調(diào)(callback)接口。它允許應(yīng)用程序能對一些事件的發(fā)生作出相應(yīng)的操作,例如interceptor、lifecycle和validatable都是這一類接口。4) 一些可以用來擴(kuò)展hibernate框架的映射機(jī)制的接口,例如usertype、compositeusertype和identifiergenerator等。注意:有關(guān)hibernate框架的 主要的api的應(yīng)用方面的介紹,讀者可以閱讀本書第二章的“hibernate的主要的核心api類”部分。(2)在hibernate

30、框架中使用了j2ee架構(gòu)中的jdbc、jta、jndi等方面的技術(shù)其中jdbc是一個(gè)支持關(guān)系數(shù)據(jù)庫操作的一個(gè)基礎(chǔ)層;它與jndi和jta一起結(jié)合,使得hibernate框架可以方便地集成到j(luò)2ee應(yīng)用服務(wù)器環(huán)境中。jndi(java naming and directory interface,java 命名和目錄接口)是指在分布式計(jì)算環(huán)境通常使用命名和目錄服務(wù)來獲取共享的組件和資源。命名和目錄服務(wù)將名稱與位置、服務(wù)、信息和資源關(guān)聯(lián)起來。它為開發(fā)人員提供了查找和訪問各種命名和目錄服務(wù)的通用、統(tǒng)一的接口。jta(java transaction api,java事務(wù)api)是指由j2ee事務(wù)管理

31、器所管理的事務(wù)。其最大的特點(diǎn)是調(diào)用usertransaction接口的begin()、commit()和rollback()方法來完成事務(wù)范圍的界定,事務(wù)的提交和回滾。jta 事務(wù)可以實(shí)現(xiàn)同一事務(wù)對應(yīng)不同的數(shù)據(jù)庫(分布式事務(wù))。而對這些方面的知識的學(xué)習(xí)和掌握也是一個(gè)比較困難的過程,因此在hibernate框架中對j2ee中這些復(fù)雜、深奧的與持久層實(shí)現(xiàn)相關(guān)的各種技術(shù)加以屏蔽,而給應(yīng)用系統(tǒng)的開發(fā)者提供一個(gè)更加簡單、高效的編程接口(請見下面的圖1.7所示)。5、如何學(xué)習(xí)hibernate框架(1)經(jīng)常閱讀hibernate文檔在下載的hibernate框架系統(tǒng)包中配套有一個(gè)電子幫助文檔,在該hibernate框架文檔中給出許多應(yīng)用hibernate框架來開發(fā)應(yīng)用系統(tǒng)的持久層的經(jīng)驗(yàn)和最佳實(shí)踐。下圖1.6 顯示了hibernate框架系統(tǒng)包中配套的電子幫助文檔所在的目錄路徑。圖1.6 hibernate系統(tǒng)包中配套的電子幫助文檔所在的目錄路徑(2)學(xué)習(xí)hibernate框架時(shí)不要僅僅停留在簡單的應(yīng)用層次上在學(xué)習(xí)hibernate框架時(shí),主要是要學(xué)習(xí)hibernate框架中是如何簡化對應(yīng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論