《輕量級(jí)Java EE程序設(shè)計(jì)及實(shí)踐》課件第5章 Hibernate基礎(chǔ)_第1頁(yè)
《輕量級(jí)Java EE程序設(shè)計(jì)及實(shí)踐》課件第5章 Hibernate基礎(chǔ)_第2頁(yè)
《輕量級(jí)Java EE程序設(shè)計(jì)及實(shí)踐》課件第5章 Hibernate基礎(chǔ)_第3頁(yè)
《輕量級(jí)Java EE程序設(shè)計(jì)及實(shí)踐》課件第5章 Hibernate基礎(chǔ)_第4頁(yè)
《輕量級(jí)Java EE程序設(shè)計(jì)及實(shí)踐》課件第5章 Hibernate基礎(chǔ)_第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-了解Hibernate體系結(jié)構(gòu)熟悉Hibernate應(yīng)用開(kāi)發(fā)方式掌握Hibernate核心類(lèi)和接口的用法掌握Hibernate配置文件的編寫(xiě)掌握Hibernate映射文件的編寫(xiě)理解持久化對(duì)象的各個(gè)狀態(tài)及轉(zhuǎn)化目標(biāo)-2-ORMObjectRelationalMapping對(duì)象關(guān)系映射解決關(guān)系型數(shù)據(jù)庫(kù)和面向?qū)ο蟮恼Z(yǔ)言之間的數(shù)據(jù)映射問(wèn)題貫徹面向?qū)ο蟮木幊趟枷霚p少代碼的編寫(xiě)量,提高工作效率提高訪問(wèn)數(shù)據(jù)庫(kù)的性能,降低訪問(wèn)數(shù)據(jù)庫(kù)的頻率具有相對(duì)獨(dú)立性,發(fā)生變化時(shí)不會(huì)影響上層的實(shí)現(xiàn)-3-Hibernate概述Hibernate是流行的ORM框架開(kāi)源并且免費(fèi),方便需要時(shí)研究、改寫(xiě)源代碼,進(jìn)行功能定制簡(jiǎn)單,避免引入過(guò)多復(fù)雜問(wèn)題,進(jìn)行輕量級(jí)封裝,容易調(diào)試具有可擴(kuò)展性,API開(kāi)放,根據(jù)需要可進(jìn)行擴(kuò)展穩(wěn)定的性能,發(fā)展有保障-4-HibernateAPIHibernateAPI中提供了Hibernate的功能類(lèi)和接口,應(yīng)用程序通過(guò)這些類(lèi)和接口可以直接以面向?qū)ο蟮姆绞皆L問(wèn)數(shù)據(jù)庫(kù)名稱(chēng)說(shuō)明Configuration類(lèi)用于配置、啟動(dòng)Hibernate,創(chuàng)建SessionFactory實(shí)例對(duì)象SessionFactory接口用于初始化Hibernate,創(chuàng)建Session實(shí)例,充當(dāng)數(shù)據(jù)源代理Session接口用于保存、更新、刪除、加載和查詢(xún)持久化對(duì)象,充當(dāng)持久化管理器Transaction接口用于封裝底層的事務(wù),充當(dāng)事務(wù)管理器Query接口用于執(zhí)行HQL數(shù)據(jù)庫(kù)查詢(xún),充當(dāng)Hibernate查詢(xún)器Criteria接口用于創(chuàng)建并執(zhí)行面向?qū)ο蠓绞降牟樵?xún),充當(dāng)Hibernate查詢(xún)器-5-Hibernate體系結(jié)構(gòu)Hibernate框架將開(kāi)發(fā)人員從JDBC的繁瑣開(kāi)發(fā)中釋放出來(lái),開(kāi)發(fā)人員無(wú)需關(guān)注底層數(shù)據(jù)庫(kù)連接的獲得、數(shù)據(jù)訪問(wèn)的實(shí)現(xiàn)、事務(wù)的控制等,而是以面向?qū)ο蟮姆绞竭M(jìn)行持久層操作-6-Hibernate常用對(duì)象對(duì)象功能SessionFactoryHibernate的關(guān)鍵對(duì)象,是針對(duì)單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)過(guò)編譯后的內(nèi)存鏡像,SessionFactory接口負(fù)責(zé)初始化Hibernate,充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建Session對(duì)象。它是生成Session的工廠,一個(gè)應(yīng)用中只初始化一個(gè)SessionFactory,為不同的線程提供SessionSessionHibernate持久化操作的關(guān)鍵對(duì)象,是應(yīng)用程序與數(shù)據(jù)庫(kù)之間交互操作的一個(gè)單線程對(duì)象,所有的持久化對(duì)象必須在Session管理下才可以進(jìn)行持久化操作Transaction提供持久化中的原子操作,具有數(shù)據(jù)庫(kù)事務(wù)的概念PersistentObject持久化對(duì)象,與Session關(guān)聯(lián),處于持久化狀態(tài)TransientObject瞬態(tài)對(duì)象,沒(méi)有與Session關(guān)聯(lián),尚未持久化的對(duì)象ConnectionProvider數(shù)據(jù)庫(kù)連接提供者,用于生成與數(shù)據(jù)庫(kù)建立連接的JDBC對(duì)象TransactionFactory是生成Transaction對(duì)象的工廠,實(shí)現(xiàn)了對(duì)事務(wù)的封裝-7-Hibernate應(yīng)用開(kāi)發(fā)方式自底向上從數(shù)據(jù)庫(kù)表到持久化類(lèi)自頂向下從持久化類(lèi)到數(shù)據(jù)庫(kù)表從中間出發(fā)向上與向下同時(shí)發(fā)展開(kāi)發(fā)步驟配置Hibernate應(yīng)用環(huán)境,在應(yīng)用中添加Hibernate所需的jar包,并創(chuàng)建Hibernate配置文件創(chuàng)建持久化類(lèi)及其ORM映射文件利用Configuration裝載配置利用SessionFactory創(chuàng)建Session通過(guò)Session進(jìn)行持久化對(duì)象的管理利用Transaction管理事務(wù)利用Query進(jìn)行HQL查詢(xún)或利用Criteria實(shí)現(xiàn)條件查詢(xún)-8-配置Hibernate環(huán)境–添加類(lèi)庫(kù)hibernate3.jar文件是Hibernate的核心類(lèi)庫(kù)其他文件是Hibernate框架本身需要引用的jar文件-9-配置Hibernate環(huán)境–配置文件<hibernate-configuration> <session-factory> <!--配置MySQL連接屬性--> <propertyname="dialect"> org.hibernate.dialect.MySQLDialect </property> <propertyname="connection.driver_class"> com.mysql.jdbc.Driver </property> <propertyname="connection.url"> jdbc:mysql://localhost:3306/ch </property> <propertyname="connection.username">root</property> <propertyname="connection.password">root</property> <!--在控制臺(tái)顯示SQL語(yǔ)句--> <propertyname="show_sql">true</property> <!--根據(jù)需要自動(dòng)生成、更新數(shù)據(jù)表--> <propertyname="hbm2ddl.auto">update</property> <!--注冊(cè)所有ORM映射文件--> <mappingresource="com/dh/ch05/pojos/User.hbm.xml"/> </session-factory></hibernate-configuration>-10-持久化類(lèi)及映射文件publicclassCustomerimplementsSerializable{ privateIntegerid; privateStringuserName; privateStringpassword; privateStringrealName; privateStringaddress; privateStringmobile; ......省略getter和setter方法}<hibernate-mappingpackage="com.dh.ch05.pojos"> <classname="Customer"table="CUSTOMER"> <!--主鍵--> <idname="id"column="ID"> <generatorclass="native"/> </id> <!--用戶名--> <propertyname="userName"column="USERNAME"type="string" not-null="true"/> <!--密碼--> <propertyname="password"column="PASSWORD"type="string" not-null="true"/> <!--真實(shí)姓名--> <propertyname="realName"column="REALNAME"type="string"/> <!--地址--> <propertyname="address"column="ADDRESS"type="string"/> <!--手機(jī)--> <propertyname="mobile"column="MOBILE"type="string"/> </class></hibernate-mapping>-11-利用Configuration裝載配置每個(gè)配置文件對(duì)應(yīng)一個(gè)Configuration對(duì)象,代表一個(gè)應(yīng)用程序到數(shù)據(jù)庫(kù)的映射配置//實(shí)例化ConfigurationConfigurationconfiguration=newConfiguration();//加載hibernate.cfg.xml文件configuration.configure("/hibernate.cfg.xml");-12-利用SessionFactory創(chuàng)建SessionSessionFactorysessionFactory=configuration.buildSessionFactory();//實(shí)例化SessionSessionsession=sessionFactory.openSession();SessionFactory對(duì)象是Hibernate進(jìn)行持久化操作所必須的對(duì)象,該對(duì)象是整個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)編譯后形成的內(nèi)存鏡像-13-利用Session操作數(shù)據(jù)庫(kù)Session對(duì)象是Hibernate持久化操作的關(guān)鍵對(duì)象,是Hibernate持久化操作的基礎(chǔ),是應(yīng)用程序與數(shù)據(jù)庫(kù)之間交互操作的一個(gè)單線程對(duì)象持久化對(duì)象的生命周期、事務(wù)的管理、對(duì)象的查詢(xún)、更新和刪除都是通過(guò)Session對(duì)象完成Session對(duì)象封裝了JDBC連接,具有一個(gè)一級(jí)緩存,在顯式執(zhí)行flush方法之前,所有持久化操作的數(shù)據(jù)都在Session對(duì)象的緩存中方法功能說(shuō)明save()保存持久化對(duì)象,在數(shù)據(jù)庫(kù)中新增一條記錄get()獲取數(shù)據(jù)庫(kù)中的一條記錄,當(dāng)未找到符合條件的持久化對(duì)象時(shí)返回nullload()獲取數(shù)據(jù)庫(kù)中的一條記錄,當(dāng)未找到符合條件的持久化對(duì)象時(shí)會(huì)拋出異常update()更新數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)delete()刪除數(shù)據(jù)庫(kù)中的一條記錄-14-利用Transaction管理事務(wù)Transaction對(duì)象主要用于管理事務(wù),所有持久化操作都需要在事務(wù)管理下進(jìn)行創(chuàng)建Configuration并裝載配置創(chuàng)建SessionFactory對(duì)象打開(kāi)Session開(kāi)始事務(wù)持久化操作提交事務(wù)關(guān)閉Session示例5.5CustomerTest//開(kāi)始一個(gè)事務(wù)Transactiontrans=session.beginTransaction();//多個(gè)持久化操作......//回滾事務(wù)trans.rollback();//提交事務(wù)mit();-15-HQL查詢(xún)HibernateQueryLanguage支持各種條件查詢(xún)、連接查詢(xún)和子查詢(xún)支持分頁(yè)、分組查詢(xún)支持各種聚集函數(shù)和自定義函數(shù)支持動(dòng)態(tài)綁定查詢(xún)參數(shù)Queryquery=session.createQuery("fromCustomer");//執(zhí)行查詢(xún)List<Customer>list=query.list();//遍歷輸出for(Customercus:list){ System.out.println(cus.getId()+"\t" +cus.getUserName()+"\t"

+cus.getPassword()+"\t" +cus.getRealName()+"\t"

+cus.getAddress()+"\t" +cus.getMobile());}示例5.6CustomerHQLTest.java

-16-Criteria查詢(xún)Criteria提供面向?qū)ο蟮牟樵?xún)方式Criteriacriteria=session.createCriteria(Customer.class);//執(zhí)行查詢(xún)List<Customer>list=criteria.list();//遍歷輸出for(Customercus:list){ System.out.println(cus.getId()+"\t" +cus.getUserName()+"\t"

+cus.getPassword()+"\t" +cus.getRealName()+"\t"

+cus.getAddress()+"\t" +cus.getMobile());}示例5.7CustomerCriteriaTest.java

-17-Hibernate配置文件使用perties文件作為配置文件使用hibernate.cfg.xml文件作為配置文件結(jié)合使用,一起作為配置文件屬性名功能說(shuō)明hibernate.dialect針對(duì)不同的數(shù)據(jù)庫(kù)提供不同的方言類(lèi)hibernate.connection.driver_class數(shù)據(jù)庫(kù)驅(qū)動(dòng)類(lèi)hibernate.connection.url連接數(shù)據(jù)庫(kù)的URLhibernate.connection.username連接數(shù)據(jù)庫(kù)的用戶名hibernate.connection.password連接數(shù)據(jù)庫(kù)的密碼hibernate.connection.pool_size數(shù)據(jù)庫(kù)連接池的最大容量hibernate.connection.datasource數(shù)據(jù)源的JNDI名字hibernate.show_sql是否輸出Hibernate操作數(shù)據(jù)庫(kù)使用的SQL語(yǔ)句hibernate.format_sql是否格式化輸出的SQL語(yǔ)句hibernate.hbm2ddl.auto自頂向下,從持久化類(lèi)到數(shù)據(jù)庫(kù)表的操作-18-Hibernate映射文件映射文件的根元素是<hibernate-mapping>,該元素下可以擁有多個(gè)<class>子元素,每個(gè)class元素對(duì)應(yīng)一個(gè)持久化類(lèi)的映射,即將類(lèi)和表之間的關(guān)系進(jìn)行映射屬性名功能說(shuō)明schema指定映射數(shù)據(jù)庫(kù)的schema名catalog指定映射數(shù)據(jù)庫(kù)的Catalog名default-cascade設(shè)置Hibernate默認(rèn)的級(jí)聯(lián)風(fēng)格,默認(rèn)值是nonedefault-access設(shè)置默認(rèn)屬性訪問(wèn)策略,默認(rèn)值為propertydefault-lazy設(shè)置默認(rèn)延遲加載策略,默認(rèn)值為trueauto-import是否允許使用非全限定的類(lèi)名,默認(rèn)值為truepackage指定一個(gè)包名,對(duì)于映射文件中非全限定的類(lèi)名,默認(rèn)在該包下-19-主鍵生成Hibernate映射文件中<id>元素定義了持久化類(lèi)的標(biāo)識(shí)符屬性(主鍵),其generator子元素則用來(lái)設(shè)置當(dāng)前持久化類(lèi)的標(biāo)識(shí)符屬性的生成策略類(lèi)型名功能說(shuō)明increment獲取數(shù)據(jù)庫(kù)表中所有主鍵中的最大值,在最大值基礎(chǔ)上加1identity自動(dòng)增長(zhǎng)。MSSQLServer、MySQL和DB2等數(shù)據(jù)庫(kù)中可以設(shè)置表的某個(gè)字段(列)的數(shù)值自動(dòng)增長(zhǎng)。sequence序列。Oracle、DB2等數(shù)據(jù)庫(kù)可以創(chuàng)建一個(gè)序列,然后從序列中獲取當(dāng)前序號(hào)作為主鍵值hilo“高/低位”高效算法產(chǎn)生主鍵值。seqhilo與hilo類(lèi)似,但使用指定的sequence獲取高位值。uuid采用128位的UUID算法生成一個(gè)字符串類(lèi)型的主鍵guid采用GUID字符串產(chǎn)生主鍵值native由Hibernate根據(jù)所使用的數(shù)據(jù)庫(kù)支持能力自動(dòng)選擇assigned指派值foreign通過(guò)的關(guān)聯(lián)持久化對(duì)象為主鍵賦值-20-集合映射Hibernate要求使用集合接口來(lái)聲明集合屬性,例如List、Set、Map接口等。對(duì)于不同的集合接口,在Hibernate映射文件中需要采用不同的集合映射元素集合映射元素集合屬性特性<list>java.util.List集合中的元素可以重復(fù),可以通過(guò)索引存取元素<set>java.util.Set集合中的元素不重復(fù)<map>java.util.Map集合中的元素是以key-value形式存放<array>數(shù)組可以是對(duì)象數(shù)組或基本數(shù)據(jù)類(lèi)型的數(shù)組<primitive-array>基本數(shù)據(jù)類(lèi)型的數(shù)組基本數(shù)據(jù)類(lèi)型的數(shù)組,例如:int[]、char[]等<bag>java.util.Collection無(wú)序集合<idbag>java.util.Collection無(wú)序集合,但可以為集合增加邏輯次序-21-持久化對(duì)象持久化類(lèi)都是普通的、傳統(tǒng)的Java對(duì)象(POJO)開(kāi)發(fā)應(yīng)遵守如下規(guī)則:提供一個(gè)無(wú)參數(shù)的構(gòu)造方法(默認(rèn)構(gòu)造方法)提供一個(gè)標(biāo)識(shí)屬性,通常映射到數(shù)據(jù)庫(kù)表中的主鍵每個(gè)屬性提供setter和getter方法持久化類(lèi)是非final類(lèi)持久化類(lèi)需要實(shí)現(xiàn)Serializable接口,使持久化對(duì)象可序列化

-22-持久化對(duì)象的狀態(tài)瞬時(shí)狀態(tài)持久化狀態(tài)托管狀態(tài)-23-改變持久化對(duì)象的狀態(tài)Session方法功能說(shuō)明持久化對(duì)象的狀態(tài)save()該方法保存持久化對(duì)象,進(jìn)而在數(shù)據(jù)庫(kù)中新增一條數(shù)據(jù)持久化狀態(tài)saveOrUpdate()保存或更新,該方法根據(jù)映射文件中的<id>標(biāo)簽的unsaved-value屬性值決定執(zhí)行新增或更新get()該方法根據(jù)標(biāo)識(shí)符屬性值獲取一個(gè)持久化對(duì)象,如果未找到則返回nullload()該方法根據(jù)標(biāo)識(shí)符屬性值加載一個(gè)持久化對(duì)象,如果未找到,則拋出異常update()該方法對(duì)脫管狀態(tài)的對(duì)象重新完成持久化,并更新數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)delete()該方法用于刪除數(shù)據(jù)庫(kù)表中的一條記錄,在刪除時(shí),首先需要g

溫馨提示

  • 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)論