hibernate基礎(chǔ)教程_第1頁
hibernate基礎(chǔ)教程_第2頁
hibernate基礎(chǔ)教程_第3頁
hibernate基礎(chǔ)教程_第4頁
hibernate基礎(chǔ)教程_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、,利用Hibernate實(shí)現(xiàn)O/R Mapping技術(shù) (Hibernate for O/R Mapping),楊少波,在本講您能了解如下知識點(diǎn) (The Emphases in Teaching Materials) Hibernate框架技術(shù)及應(yīng)用 為什么要使用Hibernate框架 Hibernate框架主要的技術(shù)特性 Hibernate框架的應(yīng)用場合 Hibernate框架系統(tǒng)架構(gòu) Hibernate框架中的主要API,利用Hibernate實(shí)現(xiàn)O/R Mapping技術(shù),Hibernate框架技術(shù)及應(yīng)用,1、有關(guān)與Hibernate有關(guān)的一些基本概念 (1)Hibernate技術(shù)本質(zhì)

2、上是一個(gè)提供數(shù)據(jù)訪問服務(wù)的中間件 Hibernate框架是一個(gè)面向Java 環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具,它實(shí)現(xiàn)把Java類對應(yīng)到數(shù)據(jù)庫表中,并且采用了xml技術(shù)、Java Reflection技術(shù)等。 Hibernate不僅提供了從Java類到數(shù)據(jù)表的映射,也還提供了對數(shù)據(jù)庫查詢和恢復(fù)等方面的機(jī)制支持。從而可以大幅度地減少開發(fā)時(shí)人工使用SQL 和JDBC API處理數(shù)據(jù)的時(shí)間。,(2)Hibernate是一個(gè)開放源代碼的對象關(guān)系映射框架 它對JDBC進(jìn)行了非常輕量級的對象封裝,從而使用面向?qū)ο缶幊趟季S(OOP)來操縱關(guān)系型的數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,既可

3、以在J2SE的應(yīng)用程序中使用,也可以在J2EE Web應(yīng)用系統(tǒng)中使用它。,面向開發(fā)人員簡化開發(fā)過程,2、為什么要應(yīng)用Hibernate技術(shù)-對設(shè)計(jì)人員而言 對設(shè)計(jì)人員達(dá)到持久層設(shè)計(jì)上的解耦 ,解耦合設(shè)計(jì)的目標(biāo) (1)達(dá)到業(yè)務(wù)邏輯與數(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通過對集合、繼承的支持,使開發(fā)人員能夠建立一個(gè)關(guān)系足夠“復(fù)雜”的對象模型。,面向設(shè)計(jì)人員達(dá)到“解耦”設(shè)計(jì)目標(biāo),3、為什么要應(yīng)用Hibernate框架-對開發(fā)人員而言 (1)提

4、高了編碼的效率 Hibernate是一個(gè)ORM工具,它不僅僅是實(shí)現(xiàn)了數(shù)據(jù)庫訪問性能優(yōu)化和與數(shù)據(jù)庫交互的常用操作(CRUD) 還將數(shù)據(jù)表與對象進(jìn)行了映射關(guān)聯(lián)(O/R Mapping),讓開發(fā)人員可以脫離數(shù)據(jù)庫系統(tǒng),而直接針對對象來與數(shù)據(jù)庫表進(jìn)行交互。,(2)提高了數(shù)據(jù)庫訪問的性能 開發(fā)人員可以不再需要考慮與數(shù)據(jù)庫交互的性能問題,如連接池、數(shù)據(jù)緩存等等-因?yàn)镠ibernate提供了對這些方面的功能實(shí)現(xiàn): 數(shù)據(jù)讀取和更新、事務(wù)管理、數(shù)據(jù)連接池、查詢和實(shí)體關(guān)系管理等。,(3)Hibernate使設(shè)計(jì)和開發(fā)人員達(dá)到下面的效果 對設(shè)計(jì)人員達(dá)到持久層設(shè)計(jì)上的解耦 對開發(fā)人員達(dá)到簡化持久層的編程實(shí)現(xiàn),您寫過這

5、樣的SQL語句嗎,4、為什么要提出Hibernate (1)Hibernate是JDBC的輕量級的對象封裝 做為JDBC的替代者出現(xiàn)的-不僅提供ORM映射服務(wù),還提供數(shù)據(jù)查詢和數(shù)據(jù)緩存功能 (2)優(yōu)化EJB中的CMB EntityBean 當(dāng)然EJB具有分布式的特性,而Hibernate則不具備,簡化JDBC和優(yōu)化EJB,當(dāng)然只能是優(yōu)化而不是代替,(3)輕量級的對象封裝的具體體現(xiàn) 對JDBC的數(shù)據(jù)訪問操作簡化:以面向?qū)ο蟮木幊绦问綄?shí)現(xiàn)對數(shù)據(jù)庫表中數(shù)據(jù) CRUD操作-避免復(fù)雜的SQL語句出現(xiàn)。 對JDBC的功能擴(kuò)展:采用面向?qū)ο笾械膶ο笾g的關(guān)系如“關(guān)聯(lián)、繼承、聚合和組合”等形式來解決數(shù)據(jù)庫表之

6、間存在一定的關(guān)系的數(shù)據(jù)訪問(O/R Mapping技術(shù)) 。 對JDBC的數(shù)據(jù)訪問性能改進(jìn):提供了事務(wù)管理,多種形式的緩存管理技術(shù),數(shù)據(jù)并發(fā)控制技術(shù)等方面。,5、Hibernate和JDBC在性能上的對比 (1)用hibernate開發(fā)的系統(tǒng)能提高開發(fā)效率和系統(tǒng)的可重用性等方面,因?yàn)槿魏畏庋b在JDBC之上的東西都不可能有直接去寫JDBC快(不考慮cache)。 但通過適當(dāng)?shù)姆庋b,這樣能夠降低開發(fā)的復(fù)雜性,提高開發(fā)效率和使代碼易于維護(hù)。,因此我們應(yīng)用了hibernate后系統(tǒng)的速度可能會(huì)有影響!,(2)能夠真正實(shí)現(xiàn)面向?qū)ο蟮慕?用Hibernate時(shí)最大的便利不是在寫代碼的時(shí)候用對象的操作代替

7、SQL語句,而是在建模的時(shí)候可以用面向?qū)ο蟮乃季S把很復(fù)雜的邏輯用UML圖表示出來,然后直接轉(zhuǎn)化成實(shí)體。,(3)JDBC+Hibernate相互結(jié)合 我們應(yīng)該在性能影響太大的地方采用面向?qū)ο蠛完P(guān)系相結(jié)合的方式。,這是一種比較合理的設(shè)計(jì)!,我們家中購買了汽車后,也應(yīng)該還要保留我們原來的自行車!,6、如何為應(yīng)用系統(tǒng)提供統(tǒng)一的一致的數(shù)據(jù)庫訪問操作,(1)JDBC技術(shù):它是一套API而不是一個(gè)框架。,(2)使用Hibernate 框架訪問數(shù)據(jù)庫的原理,(3)Hibernate與JDBC的主要區(qū)別,Hibernate是JDBC的輕量級的對象封裝,它是一個(gè)獨(dú)立的對象持久層,Hibernate是做為JDBC的

8、替代者出現(xiàn)的,不能用來直接和EJB中的Entity Bean做對比-不是代替EJB而是優(yōu)化EJB,在輕量級的容器中也能夠應(yīng)用O/R Mapping技術(shù)。,希望您能夠明確這點(diǎn)!,框架,Hibernate可以用在任何JDBC可以使用的場合,從某種意義上來說,Hibernate在任何場合下取代JDBC。,(4)Hibernate的一些弱點(diǎn) 主要體現(xiàn)在比如對象關(guān)系的映射配置過多,控制復(fù)雜;事務(wù)處理也面臨各種兼容問題; 一個(gè)持久性類不能映射到多個(gè)不同的數(shù)據(jù)庫表,Hibernate內(nèi)置映射類型復(fù)雜化,ID規(guī)定化生成:Hibernate中內(nèi)置標(biāo)識符生成器給表單ID自動(dòng)生成提供了方便,但卻不能自定義各種ID形

9、式。,另外不支持動(dòng)態(tài)映射數(shù)據(jù)庫表,7、什么時(shí)候要應(yīng)用Hibernate,(1)開發(fā)團(tuán)隊(duì)中沒有數(shù)據(jù)持久層的開發(fā)能力 由于hibernate為我們提供了一套成熟的O/R Mapping的模型,應(yīng)用它將能夠在短時(shí)間內(nèi)構(gòu)建適合業(yè)務(wù)需求的數(shù)據(jù)持久層的解決方案。 比如在數(shù)據(jù)緩存、連接池管理、多數(shù)據(jù)庫、分布式事務(wù)等的支持等等方面,hibernate在上述方面有比較出色的表現(xiàn)。,我們不只是CRUD,還有許多其它的要求!,我們的開發(fā)人員不能很好地把握J(rèn)DBC在不同的物理數(shù)據(jù)庫方面的差異性!,(2)對JDBC底層開發(fā)不甚熟悉者 由于Hibernate實(shí)現(xiàn)了對JDBC底層的調(diào)用封裝,這樣將能夠統(tǒng)一對不同類型的數(shù)據(jù)庫

10、系統(tǒng)的支持。 因此,當(dāng)開發(fā)者在缺乏對JDBC底層調(diào)用的了解時(shí),使用Hibernate框架則可以達(dá)到事半功倍的效果。,(3)在團(tuán)隊(duì)開發(fā)中希望能夠統(tǒng)一持久層開發(fā)平臺 可以統(tǒng)一團(tuán)隊(duì)的開發(fā)過程,從而減少溝通的頻率,同時(shí)也能夠促進(jìn)協(xié)同開發(fā)和數(shù)據(jù)共享。,團(tuán)隊(duì)有共同的目標(biāo)和平臺!,(4)希望我們的應(yīng)用系統(tǒng)不依賴于某種特定的數(shù)據(jù)庫 這一般特別適用于產(chǎn)品類型的軟件系統(tǒng)中,但在開發(fā)中要遵守一定的規(guī)則。,這可能是我們選擇Hibernate的一個(gè)主要的考慮!,盡量使用標(biāo)準(zhǔn)通用的SQL語句 盡量不使用各數(shù)據(jù)庫方言和某種數(shù)據(jù)庫特有的函數(shù)或者數(shù)據(jù)類型等 將系統(tǒng)的配置參數(shù)保存在一個(gè)properties文件或者*.xml中,然

11、后在代碼中利用類似Configuration.setProperties(Properties pro)方法載入配置參數(shù)文件。,8、Hibernate系統(tǒng)(冬眠),(1)Hibernate的設(shè)計(jì)者Gavin King Gavin King是Hibernate的作者,EJB3.0專家委員會(huì)成員,JBoss核心成員之一。Hibernate誕生在2001年11月。,(2)下載其系統(tǒng) hibernate是sourceforge的一個(gè)子項(xiàng)目,可以從Hibernate 的網(wǎng)站/或者上面獲得下載的連接。,(3)其系統(tǒng)架構(gòu),Hibernate內(nèi)部封裝了通過JDBC

12、訪問數(shù)據(jù)庫的操作,向上層應(yīng)用提供了面向?qū)ο蟮臄?shù)據(jù)訪問API。,Hibernate是Java應(yīng)用和關(guān)系數(shù)據(jù)庫之間的橋梁,它負(fù)責(zé)Java對象和關(guān)系數(shù)據(jù)之間的映射。,(4)它是“輕型”的體系結(jié)構(gòu)方案,從而允許應(yīng)用系統(tǒng)中的持久類是一種普通的JavaBean(JOPO),因此系統(tǒng)本身的核心類不必依賴于Hibernate的API。 當(dāng)然,應(yīng)用系統(tǒng)本身也可以自己直接提供JDBC數(shù)據(jù)庫連接,并且自行管理事務(wù)。,您了解“輕量級”的含義和要求嗎?,(5)當(dāng)然它也可以是一個(gè)“全面解決”的體系結(jié)構(gòu)方案,它將應(yīng)用系統(tǒng)從底層的JDBC/JTA/JNDI等方面的API中抽象出來,而讓Hibernate來處理這些技術(shù)實(shí)現(xiàn)的細(xì)

13、節(jié)。 從而可以使我們的應(yīng)用系統(tǒng)能夠屏蔽對各個(gè)物理數(shù)據(jù)庫系統(tǒng)的差別,9、Hibernate API中包含的一些主要的類,希望重點(diǎn)掌握這些接口的用法!,所應(yīng)該注意的是:由于在Hibernate中使用了J2EE架構(gòu)中的如下技術(shù):JDBC、JTA、JNDI。其中JDBC是一個(gè)支持關(guān)系數(shù)據(jù)庫操作的一個(gè)基礎(chǔ)層;它與JNDI和JTA一起結(jié)合,使得Hibernate可以方便地集成到J2EE應(yīng)用服務(wù)器中去。,10、Hibernate系統(tǒng)可以運(yùn)行在兩種環(huán)境下 Hibernate可以與任何一種Java應(yīng)用的運(yùn)行環(huán)境集成,Java應(yīng)用的運(yùn)行環(huán)境可分為兩種:受管理環(huán)境(Managed environment)和不受管理環(huán)境(Non-managed enviroment)。,(1)受管理環(huán)境應(yīng)用系統(tǒng)的整個(gè)執(zhí)行過程在容器的控制之下,(2)不受管理環(huán)境應(yīng)用系統(tǒng)的整個(gè)執(zhí)行過程不在容器的控制之下,(3)Hibernate允許Java應(yīng)用在不同的環(huán)境中移植 當(dāng)Java應(yīng)用從一個(gè)環(huán)境移植到另一個(gè)環(huán)境中時(shí),只需要修改Hibernate的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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

提交評論