第8章 Hibernate基礎(chǔ).ppt_第1頁(yè)
第8章 Hibernate基礎(chǔ).ppt_第2頁(yè)
第8章 Hibernate基礎(chǔ).ppt_第3頁(yè)
第8章 Hibernate基礎(chǔ).ppt_第4頁(yè)
第8章 Hibernate基礎(chǔ).ppt_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第8章 Hibernate基礎(chǔ),8.1 ORM簡(jiǎn)介,8.2 第一個(gè)Hibernate程序,8.3 Hibernate各種文件的作用,8.4 Hibernate工作流程,8.5 Hibernate核心接口,8.1 ORM簡(jiǎn)介,對(duì)象關(guān)系映射,其實(shí)從字面上就可以理解其含義,就是把關(guān)系與對(duì)象映射起來(lái),關(guān)系指的是關(guān)系數(shù)據(jù)庫(kù),而對(duì)象指的是程序中的類(lèi)對(duì)象。例如,在數(shù)據(jù)庫(kù)中有一個(gè)用戶表userTable,該表中有id、username、password三個(gè)字段(其中id是標(biāo)識(shí)),這樣一個(gè)表就可以在程序中映射成類(lèi)“UserTable. java”,該類(lèi)中定義3個(gè)屬性,對(duì)應(yīng)表中3個(gè)字段,如圖8.1所示。,8.2

2、第一個(gè)Hibernate程序,【實(shí)例8.1】開(kāi)發(fā)一個(gè)簡(jiǎn)單的Hibernate程序,演示Hibernate框架的基本使用方法。 1創(chuàng)建數(shù)據(jù)庫(kù)及表 開(kāi)發(fā)之前要做好相關(guān)的準(zhǔn)備工作,首先要建立數(shù)據(jù)庫(kù)及表,在SQL Server 2008/2012中建立數(shù)據(jù)庫(kù)“TEST”,在該庫(kù)中建立表“userTable”,表的結(jié)構(gòu)如表8.1所示。,8.2 第一個(gè)Hibernate程序,2創(chuàng)建Java項(xiàng)目 在MyEclipse 2014中,選擇主菜單“File”“New”“Java Project”,出現(xiàn)如圖8.2所示的“New Java Project”窗口,填寫(xiě)“Project Name”欄(項(xiàng)目名)為Hiber

3、nateDemo。,8.2 第一個(gè)Hibernate程序,3添加Hibernate開(kāi)發(fā)能力 在項(xiàng)目src目錄下創(chuàng)建一個(gè)名為org.util的包,用于放置馬上要生成的HibernateSession Factory.java文件。 右擊項(xiàng)目名,選擇菜單“MyEclipse”“Project FacetsCapabilities”“Install Hibernate Facet”,在彈出的對(duì)話框中點(diǎn)“Yes”按鈕啟動(dòng)向?qū)?,出現(xiàn)如圖8.3所示的窗口,選擇Hibernate版本為4.1。,8.2 第一個(gè)Hibernate程序,單擊“Next”按鈕,進(jìn)入如圖8.4所示的界面,用于創(chuàng)建Hibernate配

4、置文件,同時(shí)創(chuàng)建SessionFactory類(lèi),類(lèi)名默認(rèn)HibernateSessionFactory,存放于org.util包中。,8.2 第一個(gè)Hibernate程序,單擊“Next”按鈕,進(jìn)入如圖8.5所示的界面,指定Hibernate所用數(shù)據(jù)庫(kù)連接的細(xì)節(jié)。由于在本書(shū)【實(shí)例1.1】第(2)步已經(jīng)建好了一個(gè)名為sqlsrv的連接,所以這里只要選擇DB Driver為sqlsrv即可。,8.2 第一個(gè)Hibernate程序,單擊“Next”按鈕,選擇Hibernate框架所需要的類(lèi)庫(kù)(這里僅取必需的Core庫(kù)),如圖8.6所示。,8.2 第一個(gè)Hibernate程序,單擊“Finish”按鈕

5、完成添加。經(jīng)過(guò)以上一系列步驟,項(xiàng)目中新增了一個(gè)Hibernate庫(kù)目錄、一個(gè)hibernate.cfg.xml配置文件、一個(gè)HibernateSessionFactory.java類(lèi),另外,數(shù)據(jù)庫(kù)驅(qū)動(dòng)(sqljdbc4.jar)也被自動(dòng)載入進(jìn)來(lái),此時(shí)項(xiàng)目的目錄樹(shù)呈現(xiàn)如圖8.7所示的狀態(tài)。,8.2 第一個(gè)Hibernate程序,4生成POJO類(lèi)和映射文件 在項(xiàng)目src下創(chuàng)建一個(gè)名為org.vo的包,用來(lái)存放與數(shù)據(jù)庫(kù)userTable表對(duì)應(yīng)的POJO類(lèi)和映射文件。 選擇主菜單“Window”“Open Perspective”“MyEclipse Database Explorer”,打開(kāi)MyEc

6、lipse Database Explorer視圖。打開(kāi)sqlsrv連接,選中userTable表,右擊,選擇菜單“Hibernate Reverse Engineering”,如圖8.8所示。,8.2 第一個(gè)Hibernate程序,首先,如圖8.9所示,選擇生成的類(lèi)及映射文件所在的位置。,8.2 第一個(gè)Hibernate程序,單擊“Next”按鈕,進(jìn)入如圖8.10所示的界面,配置映射文件的細(xì)節(jié)。單擊“Next”,進(jìn)入如圖8.11所示的界面,主要用于配置反向工程的細(xì)節(jié),這里保持默認(rèn)配置即可。,8.2 第一個(gè)Hibernate程序,5編寫(xiě)測(cè)試類(lèi) 在src下創(chuàng)建包org.test,在該包下建立測(cè)試

7、類(lèi),命名為HibernateTest.java,其代碼為。 6運(yùn)行 可以發(fā)現(xiàn),該測(cè)試類(lèi)是包含主函數(shù)的類(lèi),故可以直接按“Java Application”程序運(yùn)行,運(yùn)行后,控制臺(tái)輸出結(jié)果如圖8.12所示。,8.3 Hibernate各種文件的作用,8.3.1 POJO類(lèi)及其映射文件 本例的POJO類(lèi)為UserTable,其源碼位于org.vo包的UserTable.java中,代碼為。 該類(lèi)是一個(gè)典型的POJO類(lèi),定義了3個(gè)屬性并自動(dòng)生成了它們的get和set方法,可以發(fā)現(xiàn),類(lèi)中的屬性與表的字段是一一對(duì)應(yīng)的。那么通過(guò)什么方法把它們相互關(guān)聯(lián)起來(lái)呢?正是*.hbm.xml映射文件!其中“*”一般定義

8、為要映射的類(lèi)名,該文件在項(xiàng)目中的位置一般與POJO類(lèi)處于同一目錄,故在該包下生成的映射文件就是UserTable.hbm.xml,代碼所示。,8.3.2 Hibernate核心配置文件,應(yīng)用Hibernate就要配置它,系統(tǒng)在添加Hibernate能力時(shí)會(huì)自動(dòng)創(chuàng)建Hibernate核心配置文件hibernate.cfg.xml?!緦?shí)例8.1】生成的該文件的內(nèi)容為。,8.3.3 HibernateSessionFactory類(lèi),HibernateSessionFactory類(lèi)是自定義的SessionFactory,名字可以根據(jù)自己的喜好來(lái)決定。這里用的是HibernateSessionFacto

9、ry,其內(nèi)容及解釋為。 從該文件源碼可以看出,Session對(duì)象的創(chuàng)建大致需要以下3個(gè)步驟: (1)初始化Hibernate配置管理類(lèi)Configuration。 (2)通過(guò)Configuration類(lèi)實(shí)例創(chuàng)建Session的工廠類(lèi)SessionFactory。 (3)通過(guò)SessionFactory得到Session實(shí)例。,8.4 Hibernate工作流程,Hibernate獲取Session對(duì)象的主要流程可分為以下4個(gè)步驟(相關(guān)代碼語(yǔ)句都在上面HibernateSessionFactory類(lèi)的源碼中): (1)創(chuàng)建一個(gè)Configuration類(lèi)實(shí)例。 該類(lèi)是整個(gè)Hibernate程序的

10、啟動(dòng)類(lèi),創(chuàng)建語(yǔ)句如下: private static Configuration configuration = new Configuration(); (2)加載Hibernate核心配置文件。 應(yīng)用Configuration類(lèi)實(shí)例調(diào)用其configure函數(shù),讀入指定的配置文件(也就是Hibernate的核心配置文件hibernate.cfg.xml,代碼如下: configuration.configure(); 其實(shí)該函數(shù)中可以帶入?yún)?shù),參數(shù)值就是指定配置文件的路徑,但如果該配置文件放在classes下則會(huì)被自動(dòng)加載。通過(guò)該步的操作,需要連接的數(shù)據(jù)庫(kù)及其屬性都設(shè)置完成了。,8.4 H

11、ibernate工作流程,(3)創(chuàng)建SessionFactory對(duì)象。 通過(guò)Configuration對(duì)象讀取到的配置文件信息創(chuàng)建SessionFactory對(duì)象,代碼如下: serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties().buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); (4)獲取Session對(duì)象。 SessionFacto

12、ry是獲得Session對(duì)象的工廠,得到該類(lèi)對(duì)象后,就可以很容易地得到Session對(duì)象,用如下語(yǔ)句: session = (sessionFactory != null) ? sessionFactory.openSession(): null; 最后就可以應(yīng)用Session對(duì)象來(lái)操作數(shù)據(jù)庫(kù)了。,8.4 Hibernate工作流程,有關(guān)Session的一些操作及事務(wù)的處理會(huì)在后面的章節(jié)中詳細(xì)講解。縱觀上例,可從總體上得出Hibernate大致的體系結(jié)構(gòu),如圖8.13所示。,8.5 Hibernate核心接口,8.5.1 Configuration接口 Configuration負(fù)責(zé)管理Hib

13、ernate的配置信息。Hibernate運(yùn)行時(shí)需要一些底層實(shí)現(xiàn)的基本信息,這些信息包括:數(shù)據(jù)庫(kù)URL、數(shù)據(jù)庫(kù)用戶名、數(shù)據(jù)庫(kù)用戶密碼、數(shù)據(jù)庫(kù)JDBC驅(qū)動(dòng)類(lèi)、數(shù)據(jù)庫(kù)dialect。 使用Hibernate必須首先提供這些基礎(chǔ)信息以完成初始化工作,為后續(xù)操作做好準(zhǔn)備。這些屬性在Hibernate配置文件hibernate.cfg.xml中加以設(shè)定,當(dāng)調(diào)用: Configuration cfg = new Configuration().configure(); 時(shí),Hibernate會(huì)自動(dòng)在根目錄(即classes)下搜索hibernate.cfg.xml文件,并將其讀取到內(nèi)存中作為后續(xù)操作的基礎(chǔ)

14、配置。,8.5.2 SessionFactory接口,SessionFactory負(fù)責(zé)創(chuàng)建Session實(shí)例,由Configuration實(shí)例構(gòu)建SessionFactory: Configuration cfg = new Configuration().configure(); SessionFactory sessionFactory = cfg.buildSessionFactory(); Configuration實(shí)例cfg會(huì)根據(jù)當(dāng)前的數(shù)據(jù)庫(kù)配置信息,構(gòu)造SessionFacory實(shí)例并返回。SessionFactory一旦構(gòu)造完畢,即被賦予特定的配置信息,也就是說(shuō),cfg的任何變更

15、將不會(huì)影響到已經(jīng)創(chuàng)建的SessionFactory實(shí)例。如果需要使用基于變更后的cfg實(shí)例的SessionFactory,需要從cfg重新構(gòu)建一個(gè)SessionFactory實(shí)例。,8.5.3 Session接口,Session是Hibernate持久化操作的基礎(chǔ),提供了眾多持久化方法,如save、update、delete、query等。通過(guò)這些方法,透明地完成對(duì)象的增、刪、改、查等操作。 同時(shí),值得注意的是,Hibernate框架中Session的設(shè)計(jì)是非線程安全的,即一個(gè)Session實(shí)例只可由一個(gè)線程使用,對(duì)同一個(gè)Session實(shí)例的多線程并發(fā)調(diào)用將導(dǎo)致難以預(yù)知的錯(cuò)誤。Session實(shí)

16、例由SessionFactory構(gòu)建,代碼如下: SessionFactory sessionFactory = cfg.buldSessionFactory(); Session session = sessionFactory.openSession(); 之后,就可調(diào)用Session提供的save、get、delete、query等方法完成持久層操作。,8.5.4 Transaction接口,Transaction是Hibernate中進(jìn)行事務(wù)操作的接口,Transaction 接口是對(duì)實(shí)際事務(wù)實(shí)現(xiàn)的一個(gè)抽象,這些實(shí)現(xiàn)包括JDBC的事務(wù)、JTA 中的UserTransaction,甚至可

17、以是CORBA 事務(wù)。之所以這樣設(shè)計(jì)是為了讓開(kāi)發(fā)者能夠使用一個(gè)統(tǒng)一的操作界面,使得自己的項(xiàng)目可以在不同的環(huán)境和容器之間方便地移值。事務(wù)對(duì)象通過(guò)Session創(chuàng)建,用如下語(yǔ)句: Transaction ts = session.beginTransaction(); 關(guān)于事務(wù)的具體應(yīng)用將在后面章節(jié)中講解。,8.5.5 Query接口,Query接口是Hibernate的查詢接口,用于向數(shù)據(jù)庫(kù)中查詢對(duì)象,在它里面包裝了一種HQL(Hibernate Query Language)查詢語(yǔ)言,采用了新的面向?qū)ο蟮牟樵兎绞?,是Hibernate官方推薦使用的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)查詢語(yǔ)言。Query和HQL是分不開(kāi)

18、的,寫(xiě)出的查詢語(yǔ)句形如: Query query = session.createQuery(from UserTable where id=1); 上面的語(yǔ)句中查詢條件id的值“1”是直接給出的,如果沒(méi)有給出,而是設(shè)為參數(shù)就要用Query接口中的方法來(lái)完成。例如以下語(yǔ)句: Query query = session.createQuery(from UserTable where id=?); 就要在后面設(shè)置其值: query.setInt(0, 要設(shè)置的值); 上面的方法是通過(guò)“?”來(lái)設(shè)置參數(shù)的,還可以用“:”后跟變量的方法來(lái)設(shè)置參數(shù),如上例可以改為: Query query = session.createQuery(from UserTable where id=:idValue); query.setInt(idValue,要設(shè)置的id值);,8.5.5 Query接口,由于上例中的id為int類(lèi)型,所以設(shè)置的時(shí)候用setInt(),如果是String類(lèi)型就要用setString()。還有一種通

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論