版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、在線教務輔導網(wǎng): :/教材其余課件及動畫素材請查閱在線教務輔導網(wǎng)QQ:349134187 或者直接輸入下面地址:第8章 Hibernate框架的根本應用本章導航本章主要介紹Hibernate框架的根底知識及與Struts的結合使用。通過本章的學習,將幫您解決如下幾個問題: Hibernate框架結構是怎樣的? Hibernate的工作原理是怎樣的? Hibernate有哪些常用的API? 如何搭建Hibernate開發(fā)環(huán)境? 如何利用Hibernate開發(fā)應用程序? 如何對Struts與Hibernate進行整合開發(fā)? 本章目標 通過本章的學習,讀者應到達如下學習目標: 了解Hibernate
2、的框架結構; 掌握Hibernate的工作原理; 學會如何應用Hibernate框架進行開發(fā); 學會Struts與Hibernate整合開發(fā)。本章內(nèi)容Hibernate框架簡介1簡單的Hibernate應用程序2Hibernate的體系結構3MyEclipse中開發(fā)Hibernate應用程序4Struts整合Hibernate開發(fā)1158.1 Hibernate簡介1. 持久化層簡介在目前的企業(yè)級應用系統(tǒng)設計中,MVC為主要的系統(tǒng)架構模式。MVC中的M層包含了復雜的業(yè)務邏輯、數(shù)據(jù)邏輯以及數(shù)據(jù)存取機制,如JDBC的連接、SQL生成和Statement創(chuàng)立,還有Result結果集的讀取等。目前我們
3、采用的是面向對象的編程思想,而數(shù)據(jù)庫模型通常是關系數(shù)據(jù)庫,這兩者的思考方式不一樣,這必然產(chǎn)生了開發(fā)過程中的不協(xié)調(diào)。為了屏蔽底層數(shù)據(jù)庫的操作,以面向對象的方式提供給開發(fā)者操作數(shù)據(jù)庫中數(shù)據(jù)的接口。可以把數(shù)據(jù)訪問細節(jié)和業(yè)務邏輯分開,把數(shù)據(jù)訪問作為單獨的持久化層。該層負責應用到數(shù)據(jù)庫的數(shù)據(jù)存儲,也負責數(shù)據(jù)的檢索和更新??蛻魧覹eb層業(yè)務層客戶層Web層業(yè)務層持久化層數(shù)據(jù)庫層數(shù)據(jù)庫層從業(yè)務層別離出的持久化層 持久化層封裝了數(shù)據(jù)訪問細節(jié),為業(yè)務邏輯層提供了面向對象的API。完善的持久化層應該到達以下目標:代碼可重用性高,能夠完成所有的數(shù)據(jù)庫訪問操作。如果需要的話,能夠支持多種數(shù)據(jù)庫平臺。具有相對獨立性,當
4、持久化層的實現(xiàn)發(fā)生變化,不會影響上層的實現(xiàn)。那么,如何實現(xiàn)持久化層呢?對于復雜的數(shù)據(jù)模型,直接通過JDBC編程來實現(xiàn)健壯的持久化層需要有專業(yè)的知識,對于企業(yè)應用的開發(fā)人員,花費大量時間從頭開發(fā)自己的持久化層不是很可行。目前在持久化層領域,已經(jīng)出現(xiàn)了許多優(yōu)秀的ORMObject Relation Mapping,對象關系映射軟件,有的是商業(yè)性的,有的是開發(fā)源代碼的。Hibernate就是一種越來越受歡送的開發(fā)源代碼的ORM軟件。ORM軟件具有中間件的特性。中間件是在應用程序和系統(tǒng)之間的連接管道。Hibernate可以看成是連接Java應用程序和關系數(shù)據(jù)庫的管道。Hibernate作為中間件,可以
5、為任何一個需要訪問關系數(shù)據(jù)庫的Java應用效勞。中間件的另一個特點是具有透明性,作為Hibernate的使用者,無需關心它是如何實現(xiàn)的,只需要知道如何訪問它的接口就行了。框架簡介Hibernate是一個功能強大的、高效率的O/R持久化查詢工具。它對JDBC進行輕量級的對象封裝,使Java程序員可以隨心所欲地使用對象編程思想來操縱數(shù)據(jù)庫。它提供一個易用的框架來實現(xiàn)把一個面向對象的域模型映射到一傳統(tǒng)的關系數(shù)據(jù)庫。它不僅負責從Java類到數(shù)據(jù)庫表格(以及來自Java數(shù)據(jù)類型的SQL數(shù)據(jù)類型)的映射,而且還提供數(shù)據(jù)查詢和檢索能力,并能大大減少花在SQL和JDBC手工數(shù)據(jù)處理上的開發(fā)時間。另外,Hibe
6、rnate擁有一種功能非常強大的查詢語言(HQL,Hi bernateQuery Language ),這種語言與SQL非常相似,便于開發(fā)人員掌握。更重要的是,HQL完全是面向對象的,查詢的是持久對象,而不是數(shù)據(jù)庫的記錄??梢杂盟鼇碇С侄鄳B(tài)、繼承、關聯(lián)等關系。8.2 一個簡單的Hibernate應用程序 為了讓大家對Hibernate應用程序有個簡單的了解,本章將從一個相對簡單的例子出發(fā),來闡述Hibernate的開發(fā)方法,為了闡述Hibernate的一些重要思想,在該例如程序中,將創(chuàng)立一些消息對象,消息對象中包含消息標題和消息內(nèi)容,創(chuàng)立對象后將其保存在數(shù)據(jù)庫中,然后對它們進行查詢。 的下載與
7、安裝 Hibernate版本差異不大,在此使用,下載時只需要下載Hibernate核心局部即可,windows平臺下載zip包,Linux平臺下載tar包。下載后得到壓縮文件,將該文件解壓后,會看到在該路徑下有一個的壓縮文件,該文件是hibernate的核心類庫文件,該路徑下還有一個lib文件夾,該文件夾中包含了Hibernate編譯和運行的第三方類庫。將文件復制到需要Hibernate的應用中,如果應用需要其他第三方類庫,那么還需要復制其他第三方類庫。如果是Web應用,那么需要將lib文件夾下的文件復制到WEB-INF/lib路徑下。2. Hibernate應用開發(fā)實例 Hibernate框
8、架作為一個ORM的具體實現(xiàn),是Java應用和關系數(shù)據(jù)庫之間的橋梁,主要用來實現(xiàn)Java對象持久化操作,在Java應用中使用Hibernate主要有以下幾個步驟: 1創(chuàng)立持久化類; 2創(chuàng)立對象-關系映射文件; 3創(chuàng)立Hibernate配置文件; 4使用Hibernate API編寫訪問數(shù)據(jù)庫的業(yè)務邏輯代碼。具體操作見課本 8.3 Hibernate的體系結構及工作原理 8.3.1 Hibernate體系結構 圖8-2 Hibernate的整體架構 圖8-3 Hibernate運行時體系結構圖 Hibernate的接口主要有4類: 1. 提供數(shù)據(jù)庫訪問操作的接口,如保存、更新、刪除和查詢,這樣的接
9、口有Session、Transaction和Query接口; 2.提供配置Hibernate的接口,有Configuration接口; 3.回調(diào)接口:使得應用程序能夠接受Hibernate內(nèi)部的事件,并做出相應的反響,這樣的接口有Interceptor、Lifecycle和Validatable接口; 4.用戶擴展接口,有UserType、CompositeUserType和IdentifierGenerator接口,如果需要,用戶可以擴展這些接口。 Hibernate的核心接口1. Configuration接口: 配置Hibernate并啟動Hibernate,Hibernate應用使用它
10、來配置來指定對象關系映射文件的位置并動態(tài)配置Hibernate的屬性,然后創(chuàng)立SessionFactory對象實例。 Hibernate運行時需要獲取一些底層實現(xiàn)的根本信息,其中幾個關鍵屬性如下:數(shù)據(jù)庫的URL連接數(shù)據(jù)庫的用戶名和密碼連接數(shù)據(jù)庫的驅動指定連接數(shù)據(jù)庫的類別,即dialect,數(shù)據(jù)庫方言這些屬性可以在Hibernate配置文件或中進行設定,應用程序是通過Configuration對象來實現(xiàn)對配置文件的讀取的,我們調(diào)用如下代碼:Configuration configuration=new );Hibernate會自動在指定的路徑下尋找Hibernate配置文件并將其加載到內(nèi)存中,作
11、為以后繼續(xù)操作的根底配置Hibernate將通過Configuration對象來讀取加載對象關系映射文件到內(nèi)存中,需要注意的是,一個Configuration對象只能代表一個數(shù)據(jù)庫配置信息。Configuration對象除了有讀取配置文件的功能外,還能創(chuàng)立SessionFactory對象。Configuration對象只有在Hibernate初始化的時候才需要創(chuàng)立,當使用Configuration創(chuàng)立了SessionFactory的實例后,其配置信息已經(jīng)綁定在它返回的SessionFactory對象實例中。因此,一般情況下,得到SessionFactory對象后,Configuration對象
12、的使命就結束了Configuration接口的重要方法:Public configuration configure(String resource)throws HibernateException在參數(shù)中指定要加載的XML格式的配置文件Public SessionFactory buildSessionFactory()throws HibernateException2. SessionFactory接口: SessionFactory初始化Hibernate,充當數(shù)據(jù)存儲源的代理,并創(chuàng)立Session實例。 SessionFactory有如下特點:它是線程平安的,這意味著應用的多個線程
13、可以訪問同一個SessionFactory實例;SessionFactory是重量級的,不能隨便創(chuàng)立或者銷毀它。一個數(shù)據(jù)存儲源對應著一個SessionFactory實例。SessionFactory會占用較大的緩存,因為它需要存儲對象關系映射文件以及預定義的SQL語句。可以為Hibernate安裝一個緩存插件,稱為Hibernate的二級緩存,用來存儲工作單元訪問過的數(shù)據(jù)。 SessionFactory負責生成Session對象??梢酝ㄟ^Configuration實例構建:Configuration conf=new Configuration().configure();SessionFac
14、tory sessionFactory=;Configuration對象會根據(jù)當前的配置信息,生成SessionFactory對象。SessionFactory對象一旦構造完畢,即被賦予特定的配置信息,即以后配置的改變不會影響到創(chuàng)立的SessionFactory對象。如果需要使用基于改動后的配置的SessionFactory對象,需要從新的Configuration對象生成SessionFactory對象。 接口:Session接口也稱為持久化管理接口,提供保存、更新、刪除、加載和查詢等數(shù)據(jù)庫操作。Session接口不是線程平安的,要防止或采用較好的策略來處理多個線程共享同一個Session的
15、情況。Session接口是輕量級的??梢詣?chuàng)立或銷毀多個Session對象。每個Session對象都有自己的緩存,稱為第一級緩存,存儲當前工作單元加載的實體對象。 接口:封裝了JDBC API、JTA和CORBA API,提供統(tǒng)一的Transaction接口,負責事務處理的操作;和Criteria接口:用于向數(shù)據(jù)庫查詢對象并控制執(zhí)行查詢的過程。Query接口包裝了HQLHibernate Query Language查詢語句,HQL與SQL類似,但它是面向對象的,引用類及類的屬性名。Criteria接口完全封裝了字符串形式的查詢語句,比Query更加面向對象,擅長執(zhí)行動態(tài)查詢。8.3.3 Hib
16、ernate工作原理Configuration cfg = new Configuration().configure();Session s=sf.openSession(); mit(); s.close(); 通過Session接口提供的各種方法操縱對數(shù)據(jù)庫的訪問提交數(shù)據(jù)庫操作結果關閉Session連接結束利用上面創(chuàng)建的Session實例創(chuàng)建事務操作接口Transaction的一個實例Transaction tx =s.beginTransaction(); 包含了Hibernate所有運行期參數(shù)SessionFactory sf=cfg.buildSessionFactory();開始
17、啟動hibernate構建Configuration實例,初始化該實例中的所有變量加載hibernate.cfg.xml配置文件到該實例(內(nèi)存)通過hibernate.cfg.xml文件中的mapping節(jié)點配置并加載hbm.xml文件至該實例(內(nèi)存)利用上面的Configuration實例創(chuàng)建一個SessionFactory實例利用上面創(chuàng)建的SessionFactory實例創(chuàng)建連接從流程圖中可以看出,Hibernate的執(zhí)行過程如下: 1配置好hibernate的配置文件和與類對應的配置文件后,啟動效勞器。 2效勞器通過實例化Configeration對象,讀取文件的配置內(nèi)容,并根據(jù)相關的需
18、求建好表或者和表建立好映射關系。 3通過實例化的Configeration對象創(chuàng)立一個sessionFactory實例。 4通過sessionFactory實例可以創(chuàng)立session對象。 5得到session之后,便可以開始一個事務,然后就可以通過Session接口提供的各種方法操縱對數(shù)據(jù)庫的訪問。除了比較復雜的全文搜索外,簡單的操作都可以通過hibernate封裝好的session內(nèi)置方法來實現(xiàn)。 6操作完成后,提交數(shù)據(jù)庫操作結果,關閉Session連接。 8.4 在MyEclipse中開發(fā)Hibernate應用程序 8.4.1 MyEclipse中為工程添加Hibernate支持步驟:1.創(chuàng)立數(shù)據(jù)庫連接 2.添加Hibernate支持8.4.2 Hibernate應用實例 【實例8-2】本小節(jié)將仍然以節(jié)中介紹的實例為根底,在MyEclipse中使用Hibernate框架來實現(xiàn)對news數(shù)據(jù)庫表的查詢、添加、刪除和修改操作。 1.持久化類和映射文件的生成 配置文件 3.編寫訪問數(shù)據(jù)庫的業(yè)務
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《口頸部評估》課件
- 頸椎專病門診介紹
- 醫(yī)用人工肺的材質和功能介紹考核試卷
- 光學顯微成像中的姿態(tài)計算方法考核試卷
- 2024店鋪合伙經(jīng)營合同
- 寵物牛奶和飲料供應考核試卷
- 蘇州科技大學天平學院《理論力學》2022-2023學年第一學期期末試卷
- 信息系統(tǒng)與供應鏈管理的協(xié)同考核試卷
- 蘇州科技大學天平學院《廣告策劃與文案》2023-2024學年第一學期期末試卷
- 蘇州科技大學天平學院《工程項目與管理學》2022-2023學年第一學期期末試卷
- 煤炭檢驗培訓課件
- 雙塔精餾公用工程故障處理(完成)雙塔精餾公用工程故障處理(完成)
- 小學生學籍卡片.模板
- 印刷設計行業(yè)檔案管理制度完善
- 少年科普經(jīng)典:從一到無窮大
- 學校食堂食品安全保障方案措施
- 音樂表演專業(yè)大學生職業(yè)生涯規(guī)劃書
- 社會學職業(yè)生涯規(guī)劃書
- 5G網(wǎng)絡設備-5G基站硬件更換
- 山西省電力系統(tǒng)污區(qū)分布圖-2021版-實施細則
- 中國傳統(tǒng)紋樣吉祥圖案課件
評論
0/150
提交評論