




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第8章 Hibernate基礎,8.1 ORM簡介,8.2 第一個Hibernate程序,8.3 Hibernate各種文件的作用,8.4 Hibernate工作流程,8.5 Hibernate核心接口,8.1 ORM簡介,對象關系映射,其實從字面上就可以理解其含義,就是把關系與對象映射起來,關系指的是關系數(shù)據庫,而對象指的是程序中的類對象。例如,在數(shù)據庫中有一個用戶表userTable,該表中有id、username、password三個字段(其中id是標識),這樣一個表就可以在程序中映射成類“UserTable. java”,該類中定義3個屬性,對應表中3個字段,如圖8.1所示。,8.2
2、第一個Hibernate程序,【實例8.1】開發(fā)一個簡單的Hibernate程序,演示Hibernate框架的基本使用方法。 1創(chuàng)建數(shù)據庫及表 開發(fā)之前要做好相關的準備工作,首先要建立數(shù)據庫及表,在SQL Server 2008/2012中建立數(shù)據庫“TEST”,在該庫中建立表“userTable”,表的結構如表8.1所示。,8.2 第一個Hibernate程序,2創(chuàng)建Java項目 在MyEclipse 2014中,選擇主菜單“File”“New”“Java Project”,出現(xiàn)如圖8.2所示的“New Java Project”窗口,填寫“Project Name”欄(項目名)為Hiber
3、nateDemo。,8.2 第一個Hibernate程序,3添加Hibernate開發(fā)能力 在項目src目錄下創(chuàng)建一個名為org.util的包,用于放置馬上要生成的HibernateSession Factory.java文件。 右擊項目名,選擇菜單“MyEclipse”“Project FacetsCapabilities”“Install Hibernate Facet”,在彈出的對話框中點“Yes”按鈕啟動向導,出現(xiàn)如圖8.3所示的窗口,選擇Hibernate版本為4.1。,8.2 第一個Hibernate程序,單擊“Next”按鈕,進入如圖8.4所示的界面,用于創(chuàng)建Hibernate配
4、置文件,同時創(chuàng)建SessionFactory類,類名默認HibernateSessionFactory,存放于org.util包中。,8.2 第一個Hibernate程序,單擊“Next”按鈕,進入如圖8.5所示的界面,指定Hibernate所用數(shù)據庫連接的細節(jié)。由于在本書【實例1.1】第(2)步已經建好了一個名為sqlsrv的連接,所以這里只要選擇DB Driver為sqlsrv即可。,8.2 第一個Hibernate程序,單擊“Next”按鈕,選擇Hibernate框架所需要的類庫(這里僅取必需的Core庫),如圖8.6所示。,8.2 第一個Hibernate程序,單擊“Finish”按鈕
5、完成添加。經過以上一系列步驟,項目中新增了一個Hibernate庫目錄、一個hibernate.cfg.xml配置文件、一個HibernateSessionFactory.java類,另外,數(shù)據庫驅動(sqljdbc4.jar)也被自動載入進來,此時項目的目錄樹呈現(xiàn)如圖8.7所示的狀態(tài)。,8.2 第一個Hibernate程序,4生成POJO類和映射文件 在項目src下創(chuàng)建一個名為org.vo的包,用來存放與數(shù)據庫userTable表對應的POJO類和映射文件。 選擇主菜單“Window”“Open Perspective”“MyEclipse Database Explorer”,打開MyEc
6、lipse Database Explorer視圖。打開sqlsrv連接,選中userTable表,右擊,選擇菜單“Hibernate Reverse Engineering”,如圖8.8所示。,8.2 第一個Hibernate程序,首先,如圖8.9所示,選擇生成的類及映射文件所在的位置。,8.2 第一個Hibernate程序,單擊“Next”按鈕,進入如圖8.10所示的界面,配置映射文件的細節(jié)。單擊“Next”,進入如圖8.11所示的界面,主要用于配置反向工程的細節(jié),這里保持默認配置即可。,8.2 第一個Hibernate程序,5編寫測試類 在src下創(chuàng)建包org.test,在該包下建立測試
7、類,命名為HibernateTest.java,其代碼為。 6運行 可以發(fā)現(xiàn),該測試類是包含主函數(shù)的類,故可以直接按“Java Application”程序運行,運行后,控制臺輸出結果如圖8.12所示。,8.3 Hibernate各種文件的作用,8.3.1 POJO類及其映射文件 本例的POJO類為UserTable,其源碼位于org.vo包的UserTable.java中,代碼為。 該類是一個典型的POJO類,定義了3個屬性并自動生成了它們的get和set方法,可以發(fā)現(xiàn),類中的屬性與表的字段是一一對應的。那么通過什么方法把它們相互關聯(lián)起來呢?正是*.hbm.xml映射文件!其中“*”一般定義
8、為要映射的類名,該文件在項目中的位置一般與POJO類處于同一目錄,故在該包下生成的映射文件就是UserTable.hbm.xml,代碼所示。,8.3.2 Hibernate核心配置文件,應用Hibernate就要配置它,系統(tǒng)在添加Hibernate能力時會自動創(chuàng)建Hibernate核心配置文件hibernate.cfg.xml?!緦嵗?.1】生成的該文件的內容為。,8.3.3 HibernateSessionFactory類,HibernateSessionFactory類是自定義的SessionFactory,名字可以根據自己的喜好來決定。這里用的是HibernateSessionFacto
9、ry,其內容及解釋為。 從該文件源碼可以看出,Session對象的創(chuàng)建大致需要以下3個步驟: (1)初始化Hibernate配置管理類Configuration。 (2)通過Configuration類實例創(chuàng)建Session的工廠類SessionFactory。 (3)通過SessionFactory得到Session實例。,8.4 Hibernate工作流程,Hibernate獲取Session對象的主要流程可分為以下4個步驟(相關代碼語句都在上面HibernateSessionFactory類的源碼中): (1)創(chuàng)建一個Configuration類實例。 該類是整個Hibernate程序的
10、啟動類,創(chuàng)建語句如下: private static Configuration configuration = new Configuration(); (2)加載Hibernate核心配置文件。 應用Configuration類實例調用其configure函數(shù),讀入指定的配置文件(也就是Hibernate的核心配置文件hibernate.cfg.xml,代碼如下: configuration.configure(); 其實該函數(shù)中可以帶入參數(shù),參數(shù)值就是指定配置文件的路徑,但如果該配置文件放在classes下則會被自動加載。通過該步的操作,需要連接的數(shù)據庫及其屬性都設置完成了。,8.4 H
11、ibernate工作流程,(3)創(chuàng)建SessionFactory對象。 通過Configuration對象讀取到的配置文件信息創(chuàng)建SessionFactory對象,代碼如下: serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties().buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); (4)獲取Session對象。 SessionFacto
12、ry是獲得Session對象的工廠,得到該類對象后,就可以很容易地得到Session對象,用如下語句: session = (sessionFactory != null) ? sessionFactory.openSession(): null; 最后就可以應用Session對象來操作數(shù)據庫了。,8.4 Hibernate工作流程,有關Session的一些操作及事務的處理會在后面的章節(jié)中詳細講解。縱觀上例,可從總體上得出Hibernate大致的體系結構,如圖8.13所示。,8.5 Hibernate核心接口,8.5.1 Configuration接口 Configuration負責管理Hib
13、ernate的配置信息。Hibernate運行時需要一些底層實現(xiàn)的基本信息,這些信息包括:數(shù)據庫URL、數(shù)據庫用戶名、數(shù)據庫用戶密碼、數(shù)據庫JDBC驅動類、數(shù)據庫dialect。 使用Hibernate必須首先提供這些基礎信息以完成初始化工作,為后續(xù)操作做好準備。這些屬性在Hibernate配置文件hibernate.cfg.xml中加以設定,當調用: Configuration cfg = new Configuration().configure(); 時,Hibernate會自動在根目錄(即classes)下搜索hibernate.cfg.xml文件,并將其讀取到內存中作為后續(xù)操作的基礎
14、配置。,8.5.2 SessionFactory接口,SessionFactory負責創(chuàng)建Session實例,由Configuration實例構建SessionFactory: Configuration cfg = new Configuration().configure(); SessionFactory sessionFactory = cfg.buildSessionFactory(); Configuration實例cfg會根據當前的數(shù)據庫配置信息,構造SessionFacory實例并返回。SessionFactory一旦構造完畢,即被賦予特定的配置信息,也就是說,cfg的任何變更
15、將不會影響到已經創(chuàng)建的SessionFactory實例。如果需要使用基于變更后的cfg實例的SessionFactory,需要從cfg重新構建一個SessionFactory實例。,8.5.3 Session接口,Session是Hibernate持久化操作的基礎,提供了眾多持久化方法,如save、update、delete、query等。通過這些方法,透明地完成對象的增、刪、改、查等操作。 同時,值得注意的是,Hibernate框架中Session的設計是非線程安全的,即一個Session實例只可由一個線程使用,對同一個Session實例的多線程并發(fā)調用將導致難以預知的錯誤。Session實
16、例由SessionFactory構建,代碼如下: SessionFactory sessionFactory = cfg.buldSessionFactory(); Session session = sessionFactory.openSession(); 之后,就可調用Session提供的save、get、delete、query等方法完成持久層操作。,8.5.4 Transaction接口,Transaction是Hibernate中進行事務操作的接口,Transaction 接口是對實際事務實現(xiàn)的一個抽象,這些實現(xiàn)包括JDBC的事務、JTA 中的UserTransaction,甚至可
17、以是CORBA 事務。之所以這樣設計是為了讓開發(fā)者能夠使用一個統(tǒng)一的操作界面,使得自己的項目可以在不同的環(huán)境和容器之間方便地移值。事務對象通過Session創(chuàng)建,用如下語句: Transaction ts = session.beginTransaction(); 關于事務的具體應用將在后面章節(jié)中講解。,8.5.5 Query接口,Query接口是Hibernate的查詢接口,用于向數(shù)據庫中查詢對象,在它里面包裝了一種HQL(Hibernate Query Language)查詢語言,采用了新的面向對象的查詢方式,是Hibernate官方推薦使用的標準數(shù)據庫查詢語言。Query和HQL是分不開
18、的,寫出的查詢語句形如: Query query = session.createQuery(from UserTable where id=1); 上面的語句中查詢條件id的值“1”是直接給出的,如果沒有給出,而是設為參數(shù)就要用Query接口中的方法來完成。例如以下語句: Query query = session.createQuery(from UserTable where id=?); 就要在后面設置其值: query.setInt(0, 要設置的值); 上面的方法是通過“?”來設置參數(shù)的,還可以用“:”后跟變量的方法來設置參數(shù),如上例可以改為: Query query = session.createQuery(from UserTable where id=:idValue); query.setInt(idValue,要設置的id值);,8.5.5 Query接口,由于上例中的id為int類型,所以設置的時候用setInt(),如果是String類型就要用setString()。還有一種通
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 19152-4:2025 EN Geographic information - Land Administration Domain Model (LADM) - Part 4: Valuation information
- 醫(yī)療資源分配與職業(yè)倦怠關聯(lián)-洞察闡釋
- 測試數(shù)據分析-洞察闡釋
- 生物多樣性與氣候變化-洞察闡釋
- 邊緣AI推理與邊緣計算的結合-洞察闡釋
- 【基于哈佛分析框架企業(yè)財務分析國內外文獻綜述3900字】
- 【企業(yè)股利政策研究的國內外文獻綜述2400字】
- 2025至2030中國白三烯a4水解酶行業(yè)產業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國畜產品行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國瑜伽磚行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 手術室物品清點原則與制度
- 藥品批發(fā)企業(yè)現(xiàn)代物流基本要求DB41-T 2318-2022
- GB/T 625-2024化學試劑硫酸
- 采血針市場發(fā)展前景分析及供需格局研究預測報告
- 氣胸完整版本
- 重慶市智慧園林綠化管理信息系統(tǒng)-可行性研究報告(國信咨詢)
- 2023-2024學年山東省泰安市泰山區(qū)七年級(下)期末數(shù)學試卷(五四學制)(含答案)
- 2024住院患者靜脈血栓栓塞癥預防護理與管理專家共識要點(全文)
- 2024車輛掛靠證明
- DL∕T 1833-2018 柔性直流輸電換流閥檢修規(guī)程
- 近視表征的表觀遺傳機制
評論
0/150
提交評論