Hibernate入門基礎(chǔ)概念整理.doc_第1頁
Hibernate入門基礎(chǔ)概念整理.doc_第2頁
Hibernate入門基礎(chǔ)概念整理.doc_第3頁
Hibernate入門基礎(chǔ)概念整理.doc_第4頁
Hibernate入門基礎(chǔ)概念整理.doc_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

以下資料為java培訓(xùn)為大家整理:第一次接觸Hibernate已經(jīng)是4年前的事情了,通過myeclipse可以直接生成實體類,甚感框架之神奇,最為神奇的是,習(xí)慣使用ibatis之后就再也沒用過Hibernate了。 不得不承認,當習(xí)慣了一個方式處理一類事情之后,就總設(shè)法用最習(xí)慣的方式去面對所有問題了,直到遇到了不得不換種方式的時候,現(xiàn)在就是這個時候了。 好,不多廢話了,開始整理Hibernate 一、Hibernate入門常識: 1. 面向?qū)ο笤O(shè)計的軟件內(nèi)部運行過程可以理解成就是在不斷創(chuàng)建各種新對象、建立對象之 間的關(guān)系,調(diào)用對象的方法來改變各個對象的狀態(tài)和對象消亡的過程,不管程序運行的過程 和操作怎么樣,本質(zhì)上都是要得到一個結(jié)果,程序上一個時刻和下一個時刻的運行結(jié)果的差 異就表現(xiàn)在內(nèi)存中的對象狀態(tài)發(fā)生了變化。 2. 為了在關(guān)機和內(nèi)存空間不夠的狀況下,保持程序的運行狀態(tài),需要將內(nèi)存中的對象狀態(tài)保 存到持久化設(shè)備和從持久化設(shè)備中恢復(fù)出對象的狀態(tài),通常都是保存到關(guān)系數(shù)據(jù)庫來保存大 量對象信息。從Java 程序的運行功能上來講,保存對象狀態(tài)的功能相比系統(tǒng)運行的其他功 能來說,應(yīng)該是一個很不起眼的附屬功能,java 采用jdbc 來實現(xiàn)這個功能,這個不起眼的 功能卻要編寫大量的代碼,而做的事情僅僅是保存對象和恢復(fù)對象,并且那些大量的jdbc 代碼并沒有什么技術(shù)含量,基本上是采用一套例行公事的標準代碼模板來編寫,是一種苦活 和重復(fù)性的工作。 3. 通過數(shù)據(jù)庫保存 java 程序運行時產(chǎn)生的對象和恢復(fù)對象,其實就是實現(xiàn)了 java 對象與關(guān) 系數(shù)據(jù)庫記錄的映射關(guān)系,稱為ORM(即Object Relation Mapping),人們可以通過封裝 JDBC 代碼來實現(xiàn)了這種功能,封裝出來的產(chǎn)品稱之為 ORM框架,Hibernate 就是其中的一種流行 ORM框架。使用 Hibernate 框架,不用寫 JDBC 代碼,僅僅是調(diào)用一個 save 方法,就可以 將對象保存到關(guān)系數(shù)據(jù)庫中,僅僅是調(diào)用一個get方法,就可以從數(shù)據(jù)庫中加載出一個對象。 4. 使用Hibernate 的基本流程是:配置 Configuration 對象、產(chǎn)生 SessionFactory、創(chuàng)建 session 對象,啟動事務(wù),完成CRUD 操作,提交事務(wù),關(guān)閉session . 5. 使用Hibernate 時,先要配置 hibernate.cfg.xml文件,其中配置數(shù)據(jù)庫連接信息和方言等, 還要為每個實體配置相應(yīng)的hbm.xml 文件,hibernate.cfg.xml文件中需要登記每個hbm.xml 文件。 6. 在應(yīng)用Hibernate 時,重點要了解 Session的緩存原理,級聯(lián),延遲加載和 hql 查詢。 細細品讀上面這幾句話,如果沒懂,建議順延學(xué)習(xí)Hibernate計劃。 二、Hibernate工作原理 Hibernate 的初始化。 讀取Hibernate 的配置信息-創(chuàng)建Session Factory 1)創(chuàng)建Configeration類的實例。 它的構(gòu)造方法:將配置信息(Hibernate config.xml)讀入到內(nèi)存。 一個Configeration 實例代表Hibernate 所有Java類到Sql數(shù)據(jù)庫映射的集合。 2)創(chuàng)建SessionFactory實例 把Configeration 對象中的所有配置信息拷貝到SessionFactory的緩存中。 SessionFactory的實例代表一個數(shù)據(jù)庫存儲員源,創(chuàng)建后不再與Configeration 對象關(guān)聯(lián)。 緩存(cache):指Java對象的屬性(通常是一些集合類型的屬性-占用內(nèi)存空間。 SessionFactory的緩存中:Hibernate 配置信息。OR映射元數(shù)據(jù)。 緩存-大:重量級對象 ?。狠p量級對象 3)調(diào)用SessionFactory創(chuàng)建Session的方法 1.用戶自行提供JDBC連接。 Connection con=dataSource.getConnection(); Session s=sessionFactory.openSession(con); 2.讓SessionFactory提供連接 Session s=sessionFactory.openSession(); 4)通過Session 接口提供的各種方法來操縱數(shù)據(jù)庫訪問。 三、Hibernate緩存體系 一級緩存: Session 有一個內(nèi)置的緩存,其中存放了被當前工作單元加載的對象。 每個Session 都有自己獨立的緩存,且只能被當前工作單元訪問。 二級緩存: SessionFactory的外置的可插拔的緩存插件。其中的數(shù)據(jù)可被多個Session共享訪問。 SessionFactory的內(nèi)置緩存:存放了映射元數(shù)據(jù),預(yù)定義的Sql語句。四、Hibernate中Java對象狀態(tài) 1.臨時狀態(tài) (transient) 特征: 1.不處于Session 緩存中 2.數(shù)據(jù)庫中沒有對象記錄 Java如何進入臨時狀態(tài) 1.通過new語句剛創(chuàng)建一個對象時 2.當調(diào)用Session 的delete()方法,從Session 緩存中刪除一個對象時。 2.持久化狀態(tài)(persisted) 特征: 1.處于Session 緩存中 2.持久化對象數(shù)據(jù)庫中設(shè)有對象記錄 3.Session 在特定時刻會保持二者同步 Java如何進入持久化狀態(tài) 1.Session 的save()把臨時-持久化狀態(tài) 2.Session 的load(),get()方法返回的對象 3.Session 的find()返回的list集合中存放的對象 4.Session 的update(),saveOrupdate()使游離-持久化 3.游離狀態(tài)(detached) 特征: 1.不再位于Session 緩存中 2.游離對象由持久化狀態(tài)轉(zhuǎn)變而來,數(shù)據(jù)庫中可能還有對應(yīng)記錄。 Java如何進入持久化狀態(tài)-游離狀態(tài) 1.Session 的close()方法 2.Session 的evict()方法,從緩存中刪除一個對象。提高性能。少用。 這個需要看看Hibernate持久對象狀態(tài)圖:五、Hibernate學(xué)習(xí)建議根據(jù)自身經(jīng)驗,J2EE框架學(xué)習(xí)還是以項目為中心,框架只是讓項目更快更好的完成。明白了這一點之后,就需要準備一些相關(guān)資料,電子書或圖書館借本厚厚的那些不怎么常用的但可以當字典使用的書籍。當遇到某個功能無法正常實現(xiàn)是,解決方法建議是仿照別人代碼-實現(xiàn)功能-重構(gòu)代碼-查看原理-記錄心得總之,學(xué)習(xí)框架的前提是基礎(chǔ)已經(jīng)很扎實,需要提高工作效率才應(yīng)用的,初級程序員建議還是多增加自己有效代碼量,不要過早的去接觸成熟框架。Hibernate關(guān)系映射之關(guān)聯(lián)映射Hibernate關(guān)系映射 1.關(guān)聯(lián)映射 概念:關(guān)聯(lián)映射,就是將關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫中,所謂的關(guān)聯(lián)關(guān)系,在對象模型中,就是一個或多個引用 分類: (1)多對一關(guān)聯(lián)映射 many-to-one 多對一關(guān)聯(lián)映射原理:在多的一端加入一個外鍵,指向一的一端 在多的一端采用如下標簽映射: (2)一對一關(guān)聯(lián)映射 one-to-one A主鍵關(guān)聯(lián):即讓兩個對象具有相同的主鍵值,以表明它們之間的一一對應(yīng)的關(guān)系;數(shù)據(jù)庫表不會有額外的字段來維護它們之間的關(guān)系,僅通過表的主鍵來關(guān)聯(lián) 示例1: hibernate一對一主鍵關(guān)聯(lián)映射(單向關(guān)聯(lián)Person-IdCard) 一對一關(guān)聯(lián)映射原理:讓兩個實體的主鍵一樣,這樣就不需要加入多余的字段了(擴展性不好) idCard 示例2: hibernate一對一主鍵關(guān)聯(lián)映射(雙向關(guān)聯(lián)PersonIdCard) 需要在IdCard加入標簽, 指示hibernate將關(guān)聯(lián)對象Person根據(jù)主鍵加載上來 不影響存儲,只影響加載 標簽fetch屬性默認為join. B唯一外鍵關(guān)聯(lián):外鍵關(guān)聯(lián),本來是用于多對一的配置,但是如果加上唯一的限制之后,也可以用來表示一對一關(guān)聯(lián)關(guān)系 示例1: hibernate一對一唯一外鍵關(guān)聯(lián)映射(單向關(guān)聯(lián)Person-IdCard) 一對一唯一外鍵關(guān)聯(lián)映射,其實是多對一的特例 采用標簽來映射,指定多的一端unique為true, 這樣就限制了多的一端的多重性為一,就是這樣來映射的。 示例2: hibernate一對一唯一外鍵關(guān)聯(lián)映射(雙向關(guān)聯(lián)PersonIdCard) 一對一唯一外鍵關(guān)聯(lián)雙向,采用標簽映射, 必須指定標簽中的property-ref屬性為關(guān)系字段的名稱 (3)一對多關(guān)聯(lián)映射 one-to-many 示例1: hibernate一對多關(guān)聯(lián)映射(單向Classes-Student) 一對多和多對一的映射原理是一樣的,都是在多的一端加入一個外鍵指向一的一端 它們的區(qū)別在于維護的關(guān)系不同: *多對一維護的關(guān)系:多指向一的關(guān)系,如果維護了多指向一的關(guān)系,那么加載多的時候會把一加載上來 *一對多維護的關(guān)系:一指向多的關(guān)系,如果維護了一指向多的關(guān)系,那么加載一的時候會把多加載上來 在一的一端維護關(guān)系存在缺陷: *因為多的一端Student不知道Classes的存在(也就是Student沒有維護與Classes的關(guān)系) 所以在保存Student的時候關(guān)系字段classesId是為null的,如果將該字段設(shè)置為非空,則將無法保存數(shù)據(jù) *另外因為Student不維護關(guān)系,而Classes維護關(guān)系,Classes就會發(fā)出多余的update語句,保證Classes和Student有關(guān)系,這樣加載Classes的時候才能把該Classes對應(yīng)的學(xué)生集合加載上 !- -保存不成功 - -會發(fā)出多余的update語句來維持關(guān)系 示例2: hibernate一對多關(guān)聯(lián)映射(雙向ClassesStudent) 采用一對多雙向關(guān)聯(lián)映射的目的主要是為了解決一對多單向關(guān)聯(lián)的缺陷 而不是需求驅(qū)動的 一對多雙向關(guān)聯(lián)的映射方式: *在一的一端的集合上采用標簽,在多的一端加入一個外鍵 *在多的一端采用標簽 !注意: 標簽和標簽加入的字段保持一

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論