




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、在線教務(wù)輔導(dǎo)網(wǎng): :/教材其余課件及動(dòng)畫(huà)素材請(qǐng)查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187 或者直接輸入下面地址:第8章 Hibernate框架的根本應(yīng)用本章導(dǎo)航本章主要介紹Hibernate框架的根底知識(shí)及與Struts的結(jié)合使用。通過(guò)本章的學(xué)習(xí),將幫您解決如下幾個(gè)問(wèn)題: Hibernate框架結(jié)構(gòu)是怎樣的? Hibernate的工作原理是怎樣的? Hibernate有哪些常用的API? 如何搭建Hibernate開(kāi)發(fā)環(huán)境? 如何利用Hibernate開(kāi)發(fā)應(yīng)用程序? 如何對(duì)Struts與Hibernate進(jìn)行整合開(kāi)發(fā)? 本章目標(biāo) 通過(guò)本章的學(xué)習(xí),讀者應(yīng)到達(dá)如下學(xué)習(xí)目標(biāo): 了解Hibernate
2、的框架結(jié)構(gòu); 掌握Hibernate的工作原理; 學(xué)會(huì)如何應(yīng)用Hibernate框架進(jìn)行開(kāi)發(fā); 學(xué)會(huì)Struts與Hibernate整合開(kāi)發(fā)。本章內(nèi)容Hibernate框架簡(jiǎn)介1簡(jiǎn)單的Hibernate應(yīng)用程序2Hibernate的體系結(jié)構(gòu)3MyEclipse中開(kāi)發(fā)Hibernate應(yīng)用程序4Struts整合Hibernate開(kāi)發(fā)1158.1 Hibernate簡(jiǎn)介1. 持久化層簡(jiǎn)介在目前的企業(yè)級(jí)應(yīng)用系統(tǒng)設(shè)計(jì)中,MVC為主要的系統(tǒng)架構(gòu)模式。MVC中的M層包含了復(fù)雜的業(yè)務(wù)邏輯、數(shù)據(jù)邏輯以及數(shù)據(jù)存取機(jī)制,如JDBC的連接、SQL生成和Statement創(chuàng)立,還有Result結(jié)果集的讀取等。目前我們
3、采用的是面向?qū)ο蟮木幊趟枷?,而?shù)據(jù)庫(kù)模型通常是關(guān)系數(shù)據(jù)庫(kù),這兩者的思考方式不一樣,這必然產(chǎn)生了開(kāi)發(fā)過(guò)程中的不協(xié)調(diào)。為了屏蔽底層數(shù)據(jù)庫(kù)的操作,以面向?qū)ο蟮姆绞教峁┙o開(kāi)發(fā)者操作數(shù)據(jù)庫(kù)中數(shù)據(jù)的接口。可以把數(shù)據(jù)訪問(wèn)細(xì)節(jié)和業(yè)務(wù)邏輯分開(kāi),把數(shù)據(jù)訪問(wèn)作為單獨(dú)的持久化層。該層負(fù)責(zé)應(yīng)用到數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ),也負(fù)責(zé)數(shù)據(jù)的檢索和更新??蛻魧覹eb層業(yè)務(wù)層客戶層Web層業(yè)務(wù)層持久化層數(shù)據(jù)庫(kù)層數(shù)據(jù)庫(kù)層從業(yè)務(wù)層別離出的持久化層 持久化層封裝了數(shù)據(jù)訪問(wèn)細(xì)節(jié),為業(yè)務(wù)邏輯層提供了面向?qū)ο蟮腁PI。完善的持久化層應(yīng)該到達(dá)以下目標(biāo):代碼可重用性高,能夠完成所有的數(shù)據(jù)庫(kù)訪問(wèn)操作。如果需要的話,能夠支持多種數(shù)據(jù)庫(kù)平臺(tái)。具有相對(duì)獨(dú)立性,當(dāng)
4、持久化層的實(shí)現(xiàn)發(fā)生變化,不會(huì)影響上層的實(shí)現(xiàn)。那么,如何實(shí)現(xiàn)持久化層呢?對(duì)于復(fù)雜的數(shù)據(jù)模型,直接通過(guò)JDBC編程來(lái)實(shí)現(xiàn)健壯的持久化層需要有專業(yè)的知識(shí),對(duì)于企業(yè)應(yīng)用的開(kāi)發(fā)人員,花費(fèi)大量時(shí)間從頭開(kāi)發(fā)自己的持久化層不是很可行。目前在持久化層領(lǐng)域,已經(jīng)出現(xiàn)了許多優(yōu)秀的ORMObject Relation Mapping,對(duì)象關(guān)系映射軟件,有的是商業(yè)性的,有的是開(kāi)發(fā)源代碼的。Hibernate就是一種越來(lái)越受歡送的開(kāi)發(fā)源代碼的ORM軟件。ORM軟件具有中間件的特性。中間件是在應(yīng)用程序和系統(tǒng)之間的連接管道。Hibernate可以看成是連接Java應(yīng)用程序和關(guān)系數(shù)據(jù)庫(kù)的管道。Hibernate作為中間件,可以
5、為任何一個(gè)需要訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的Java應(yīng)用效勞。中間件的另一個(gè)特點(diǎn)是具有透明性,作為Hibernate的使用者,無(wú)需關(guān)心它是如何實(shí)現(xiàn)的,只需要知道如何訪問(wèn)它的接口就行了??蚣芎?jiǎn)介Hibernate是一個(gè)功能強(qiáng)大的、高效率的O/R持久化查詢工具。它對(duì)JDBC進(jìn)行輕量級(jí)的對(duì)象封裝,使Java程序員可以隨心所欲地使用對(duì)象編程思想來(lái)操縱數(shù)據(jù)庫(kù)。它提供一個(gè)易用的框架來(lái)實(shí)現(xiàn)把一個(gè)面向?qū)ο蟮挠蚰P陀成涞揭粋鹘y(tǒng)的關(guān)系數(shù)據(jù)庫(kù)。它不僅負(fù)責(zé)從Java類到數(shù)據(jù)庫(kù)表格(以及來(lái)自Java數(shù)據(jù)類型的SQL數(shù)據(jù)類型)的映射,而且還提供數(shù)據(jù)查詢和檢索能力,并能大大減少花在SQL和JDBC手工數(shù)據(jù)處理上的開(kāi)發(fā)時(shí)間。另外,Hibe
6、rnate擁有一種功能非常強(qiáng)大的查詢語(yǔ)言(HQL,Hi bernateQuery Language ),這種語(yǔ)言與SQL非常相似,便于開(kāi)發(fā)人員掌握。更重要的是,HQL完全是面向?qū)ο蟮模樵兊氖浅志脤?duì)象,而不是數(shù)據(jù)庫(kù)的記錄。可以用它來(lái)支持多態(tài)、繼承、關(guān)聯(lián)等關(guān)系。8.2 一個(gè)簡(jiǎn)單的Hibernate應(yīng)用程序 為了讓大家對(duì)Hibernate應(yīng)用程序有個(gè)簡(jiǎn)單的了解,本章將從一個(gè)相對(duì)簡(jiǎn)單的例子出發(fā),來(lái)闡述Hibernate的開(kāi)發(fā)方法,為了闡述Hibernate的一些重要思想,在該例如程序中,將創(chuàng)立一些消息對(duì)象,消息對(duì)象中包含消息標(biāo)題和消息內(nèi)容,創(chuàng)立對(duì)象后將其保存在數(shù)據(jù)庫(kù)中,然后對(duì)它們進(jìn)行查詢。 的下載與
7、安裝 Hibernate版本差異不大,在此使用,下載時(shí)只需要下載Hibernate核心局部即可,windows平臺(tái)下載zip包,Linux平臺(tái)下載tar包。下載后得到壓縮文件,將該文件解壓后,會(huì)看到在該路徑下有一個(gè)的壓縮文件,該文件是hibernate的核心類庫(kù)文件,該路徑下還有一個(gè)lib文件夾,該文件夾中包含了Hibernate編譯和運(yùn)行的第三方類庫(kù)。將文件復(fù)制到需要Hibernate的應(yīng)用中,如果應(yīng)用需要其他第三方類庫(kù),那么還需要復(fù)制其他第三方類庫(kù)。如果是Web應(yīng)用,那么需要將lib文件夾下的文件復(fù)制到WEB-INF/lib路徑下。2. Hibernate應(yīng)用開(kāi)發(fā)實(shí)例 Hibernate框
8、架作為一個(gè)ORM的具體實(shí)現(xiàn),是Java應(yīng)用和關(guān)系數(shù)據(jù)庫(kù)之間的橋梁,主要用來(lái)實(shí)現(xiàn)Java對(duì)象持久化操作,在Java應(yīng)用中使用Hibernate主要有以下幾個(gè)步驟: 1創(chuàng)立持久化類; 2創(chuàng)立對(duì)象-關(guān)系映射文件; 3創(chuàng)立Hibernate配置文件; 4使用Hibernate API編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的業(yè)務(wù)邏輯代碼。具體操作見(jiàn)課本 8.3 Hibernate的體系結(jié)構(gòu)及工作原理 8.3.1 Hibernate體系結(jié)構(gòu) 圖8-2 Hibernate的整體架構(gòu) 圖8-3 Hibernate運(yùn)行時(shí)體系結(jié)構(gòu)圖 Hibernate的接口主要有4類: 1. 提供數(shù)據(jù)庫(kù)訪問(wèn)操作的接口,如保存、更新、刪除和查詢,這樣的接
9、口有Session、Transaction和Query接口; 2.提供配置Hibernate的接口,有Configuration接口; 3.回調(diào)接口:使得應(yīng)用程序能夠接受Hibernate內(nèi)部的事件,并做出相應(yīng)的反響,這樣的接口有Interceptor、Lifecycle和Validatable接口; 4.用戶擴(kuò)展接口,有UserType、CompositeUserType和IdentifierGenerator接口,如果需要,用戶可以擴(kuò)展這些接口。 Hibernate的核心接口1. Configuration接口: 配置Hibernate并啟動(dòng)Hibernate,Hibernate應(yīng)用使用它
10、來(lái)配置來(lái)指定對(duì)象關(guān)系映射文件的位置并動(dòng)態(tài)配置Hibernate的屬性,然后創(chuàng)立SessionFactory對(duì)象實(shí)例。 Hibernate運(yùn)行時(shí)需要獲取一些底層實(shí)現(xiàn)的根本信息,其中幾個(gè)關(guān)鍵屬性如下:數(shù)據(jù)庫(kù)的URL連接數(shù)據(jù)庫(kù)的用戶名和密碼連接數(shù)據(jù)庫(kù)的驅(qū)動(dòng)指定連接數(shù)據(jù)庫(kù)的類別,即dialect,數(shù)據(jù)庫(kù)方言這些屬性可以在Hibernate配置文件或中進(jìn)行設(shè)定,應(yīng)用程序是通過(guò)Configuration對(duì)象來(lái)實(shí)現(xiàn)對(duì)配置文件的讀取的,我們調(diào)用如下代碼:Configuration configuration=new );Hibernate會(huì)自動(dòng)在指定的路徑下尋找Hibernate配置文件并將其加載到內(nèi)存中,作
11、為以后繼續(xù)操作的根底配置Hibernate將通過(guò)Configuration對(duì)象來(lái)讀取加載對(duì)象關(guān)系映射文件到內(nèi)存中,需要注意的是,一個(gè)Configuration對(duì)象只能代表一個(gè)數(shù)據(jù)庫(kù)配置信息。Configuration對(duì)象除了有讀取配置文件的功能外,還能創(chuàng)立SessionFactory對(duì)象。Configuration對(duì)象只有在Hibernate初始化的時(shí)候才需要?jiǎng)?chuàng)立,當(dāng)使用Configuration創(chuàng)立了SessionFactory的實(shí)例后,其配置信息已經(jīng)綁定在它返回的SessionFactory對(duì)象實(shí)例中。因此,一般情況下,得到SessionFactory對(duì)象后,Configuration對(duì)象
12、的使命就結(jié)束了Configuration接口的重要方法:Public configuration configure(String resource)throws HibernateException在參數(shù)中指定要加載的XML格式的配置文件Public SessionFactory buildSessionFactory()throws HibernateException2. SessionFactory接口: SessionFactory初始化Hibernate,充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并創(chuàng)立Session實(shí)例。 SessionFactory有如下特點(diǎn):它是線程平安的,這意味著應(yīng)用的多個(gè)線程
13、可以訪問(wèn)同一個(gè)SessionFactory實(shí)例;SessionFactory是重量級(jí)的,不能隨便創(chuàng)立或者銷毀它。一個(gè)數(shù)據(jù)存儲(chǔ)源對(duì)應(yīng)著一個(gè)SessionFactory實(shí)例。SessionFactory會(huì)占用較大的緩存,因?yàn)樗枰鎯?chǔ)對(duì)象關(guān)系映射文件以及預(yù)定義的SQL語(yǔ)句??梢詾镠ibernate安裝一個(gè)緩存插件,稱為Hibernate的二級(jí)緩存,用來(lái)存儲(chǔ)工作單元訪問(wèn)過(guò)的數(shù)據(jù)。 SessionFactory負(fù)責(zé)生成Session對(duì)象??梢酝ㄟ^(guò)Configuration實(shí)例構(gòu)建:Configuration conf=new Configuration().configure();SessionFac
14、tory sessionFactory=;Configuration對(duì)象會(huì)根據(jù)當(dāng)前的配置信息,生成SessionFactory對(duì)象。SessionFactory對(duì)象一旦構(gòu)造完畢,即被賦予特定的配置信息,即以后配置的改變不會(huì)影響到創(chuàng)立的SessionFactory對(duì)象。如果需要使用基于改動(dòng)后的配置的SessionFactory對(duì)象,需要從新的Configuration對(duì)象生成SessionFactory對(duì)象。 接口:Session接口也稱為持久化管理接口,提供保存、更新、刪除、加載和查詢等數(shù)據(jù)庫(kù)操作。Session接口不是線程平安的,要防止或采用較好的策略來(lái)處理多個(gè)線程共享同一個(gè)Session的
15、情況。Session接口是輕量級(jí)的。可以創(chuàng)立或銷毀多個(gè)Session對(duì)象。每個(gè)Session對(duì)象都有自己的緩存,稱為第一級(jí)緩存,存儲(chǔ)當(dāng)前工作單元加載的實(shí)體對(duì)象。 接口:封裝了JDBC API、JTA和CORBA API,提供統(tǒng)一的Transaction接口,負(fù)責(zé)事務(wù)處理的操作;和Criteria接口:用于向數(shù)據(jù)庫(kù)查詢對(duì)象并控制執(zhí)行查詢的過(guò)程。Query接口包裝了HQLHibernate Query Language查詢語(yǔ)句,HQL與SQL類似,但它是面向?qū)ο蟮模妙惣邦惖膶傩悦?。Criteria接口完全封裝了字符串形式的查詢語(yǔ)句,比Query更加面向?qū)ο?,擅長(zhǎng)執(zhí)行動(dòng)態(tài)查詢。8.3.3 Hib
16、ernate工作原理Configuration cfg = new Configuration().configure();Session s=sf.openSession(); mit(); s.close(); 通過(guò)Session接口提供的各種方法操縱對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)提交數(shù)據(jù)庫(kù)操作結(jié)果關(guān)閉Session連接結(jié)束利用上面創(chuàng)建的Session實(shí)例創(chuàng)建事務(wù)操作接口Transaction的一個(gè)實(shí)例Transaction tx =s.beginTransaction(); 包含了Hibernate所有運(yùn)行期參數(shù)SessionFactory sf=cfg.buildSessionFactory();開(kāi)始
17、啟動(dòng)hibernate構(gòu)建Configuration實(shí)例,初始化該實(shí)例中的所有變量加載hibernate.cfg.xml配置文件到該實(shí)例(內(nèi)存)通過(guò)hibernate.cfg.xml文件中的mapping節(jié)點(diǎn)配置并加載hbm.xml文件至該實(shí)例(內(nèi)存)利用上面的Configuration實(shí)例創(chuàng)建一個(gè)SessionFactory實(shí)例利用上面創(chuàng)建的SessionFactory實(shí)例創(chuàng)建連接從流程圖中可以看出,Hibernate的執(zhí)行過(guò)程如下: 1配置好hibernate的配置文件和與類對(duì)應(yīng)的配置文件后,啟動(dòng)效勞器。 2效勞器通過(guò)實(shí)例化Configeration對(duì)象,讀取文件的配置內(nèi)容,并根據(jù)相關(guān)的需
18、求建好表或者和表建立好映射關(guān)系。 3通過(guò)實(shí)例化的Configeration對(duì)象創(chuàng)立一個(gè)sessionFactory實(shí)例。 4通過(guò)sessionFactory實(shí)例可以創(chuàng)立session對(duì)象。 5得到session之后,便可以開(kāi)始一個(gè)事務(wù),然后就可以通過(guò)Session接口提供的各種方法操縱對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。除了比較復(fù)雜的全文搜索外,簡(jiǎn)單的操作都可以通過(guò)hibernate封裝好的session內(nèi)置方法來(lái)實(shí)現(xiàn)。 6操作完成后,提交數(shù)據(jù)庫(kù)操作結(jié)果,關(guān)閉Session連接。 8.4 在MyEclipse中開(kāi)發(fā)Hibernate應(yīng)用程序 8.4.1 MyEclipse中為工程添加Hibernate支持步驟:1.創(chuàng)立數(shù)據(jù)庫(kù)連接 2.添加Hibernate支持8.4.2 Hibernate應(yīng)用實(shí)例 【實(shí)例8-2】本小節(jié)將仍然以節(jié)中介紹的實(shí)例為根底,在MyEclipse中使用Hibernate框架來(lái)實(shí)現(xiàn)對(duì)news數(shù)據(jù)庫(kù)表的查詢、添加、刪除和修改操作。 1.持久化類和映射文件的生成 配置文件 3.編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的業(yè)務(wù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 買(mǎi)賣(mài)汽車(chē)簡(jiǎn)易合同范本
- 醫(yī)院強(qiáng)電施工合同范本
- 合作人退出協(xié)議合同范例
- 3人合作協(xié)議合同范例
- 公司宿舍協(xié)議合同范例
- 司機(jī)代理合同范例
- 合同假一罰三合同范本
- 二手事故車(chē)價(jià)格合同范本
- 公司出境游合同范本
- 合作建倉(cāng)庫(kù)合同范本
- GA/T 701-2024安全防范指紋識(shí)別應(yīng)用出入口控制指紋識(shí)別模塊通用規(guī)范
- 2025年阜新高等??茖W(xué)校單招職業(yè)傾向性測(cè)試題庫(kù)附答案
- 2025年包頭輕工職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案一套
- 《養(yǎng)老保險(xiǎn)的理念》課件
- 2024-2025學(xué)年第二學(xué)期英語(yǔ)教研組工作計(jì)劃
- 山東省海洋知識(shí)競(jìng)賽(初中組)考試題庫(kù)500題(含答案)
- 服務(wù)行業(yè)人力資源薪酬體系管理與優(yōu)化
- 《蔚來(lái)發(fā)展》課件
- 2024年山東商務(wù)職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 醫(yī)學(xué)教育中的學(xué)習(xí)風(fēng)格與個(gè)性化教學(xué)
- 中考數(shù)學(xué)計(jì)算題練習(xí)100道(2024年中考真題)
評(píng)論
0/150
提交評(píng)論