《輕量級Java EE程序設計及實踐》課件第5章 Hibernate基礎_第1頁
《輕量級Java EE程序設計及實踐》課件第5章 Hibernate基礎_第2頁
《輕量級Java EE程序設計及實踐》課件第5章 Hibernate基礎_第3頁
《輕量級Java EE程序設計及實踐》課件第5章 Hibernate基礎_第4頁
《輕量級Java EE程序設計及實踐》課件第5章 Hibernate基礎_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

-1-了解Hibernate體系結(jié)構(gòu)熟悉Hibernate應用開發(fā)方式掌握Hibernate核心類和接口的用法掌握Hibernate配置文件的編寫掌握Hibernate映射文件的編寫理解持久化對象的各個狀態(tài)及轉(zhuǎn)化目標-2-ORMObjectRelationalMapping對象關系映射解決關系型數(shù)據(jù)庫和面向?qū)ο蟮恼Z言之間的數(shù)據(jù)映射問題貫徹面向?qū)ο蟮木幊趟枷霚p少代碼的編寫量,提高工作效率提高訪問數(shù)據(jù)庫的性能,降低訪問數(shù)據(jù)庫的頻率具有相對獨立性,發(fā)生變化時不會影響上層的實現(xiàn)-3-Hibernate概述Hibernate是流行的ORM框架開源并且免費,方便需要時研究、改寫源代碼,進行功能定制簡單,避免引入過多復雜問題,進行輕量級封裝,容易調(diào)試具有可擴展性,API開放,根據(jù)需要可進行擴展穩(wěn)定的性能,發(fā)展有保障-4-HibernateAPIHibernateAPI中提供了Hibernate的功能類和接口,應用程序通過這些類和接口可以直接以面向?qū)ο蟮姆绞皆L問數(shù)據(jù)庫名稱說明Configuration類用于配置、啟動Hibernate,創(chuàng)建SessionFactory實例對象SessionFactory接口用于初始化Hibernate,創(chuàng)建Session實例,充當數(shù)據(jù)源代理Session接口用于保存、更新、刪除、加載和查詢持久化對象,充當持久化管理器Transaction接口用于封裝底層的事務,充當事務管理器Query接口用于執(zhí)行HQL數(shù)據(jù)庫查詢,充當Hibernate查詢器Criteria接口用于創(chuàng)建并執(zhí)行面向?qū)ο蠓绞降牟樵?,充當Hibernate查詢器-5-Hibernate體系結(jié)構(gòu)Hibernate框架將開發(fā)人員從JDBC的繁瑣開發(fā)中釋放出來,開發(fā)人員無需關注底層數(shù)據(jù)庫連接的獲得、數(shù)據(jù)訪問的實現(xiàn)、事務的控制等,而是以面向?qū)ο蟮姆绞竭M行持久層操作-6-Hibernate常用對象對象功能SessionFactoryHibernate的關鍵對象,是針對單個數(shù)據(jù)庫映射關系經(jīng)過編譯后的內(nèi)存鏡像,SessionFactory接口負責初始化Hibernate,充當數(shù)據(jù)存儲源的代理,并負責創(chuàng)建Session對象。它是生成Session的工廠,一個應用中只初始化一個SessionFactory,為不同的線程提供SessionSessionHibernate持久化操作的關鍵對象,是應用程序與數(shù)據(jù)庫之間交互操作的一個單線程對象,所有的持久化對象必須在Session管理下才可以進行持久化操作Transaction提供持久化中的原子操作,具有數(shù)據(jù)庫事務的概念PersistentObject持久化對象,與Session關聯(lián),處于持久化狀態(tài)TransientObject瞬態(tài)對象,沒有與Session關聯(lián),尚未持久化的對象ConnectionProvider數(shù)據(jù)庫連接提供者,用于生成與數(shù)據(jù)庫建立連接的JDBC對象TransactionFactory是生成Transaction對象的工廠,實現(xiàn)了對事務的封裝-7-Hibernate應用開發(fā)方式自底向上從數(shù)據(jù)庫表到持久化類自頂向下從持久化類到數(shù)據(jù)庫表從中間出發(fā)向上與向下同時發(fā)展開發(fā)步驟配置Hibernate應用環(huán)境,在應用中添加Hibernate所需的jar包,并創(chuàng)建Hibernate配置文件創(chuàng)建持久化類及其ORM映射文件利用Configuration裝載配置利用SessionFactory創(chuàng)建Session通過Session進行持久化對象的管理利用Transaction管理事務利用Query進行HQL查詢或利用Criteria實現(xiàn)條件查詢-8-配置Hibernate環(huán)境–添加類庫hibernate3.jar文件是Hibernate的核心類庫其他文件是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> <!--在控制臺顯示SQL語句--> <propertyname="show_sql">true</property> <!--根據(jù)需要自動生成、更新數(shù)據(jù)表--> <propertyname="hbm2ddl.auto">update</property> <!--注冊所有ORM映射文件--> <mappingresource="com/dh/ch05/pojos/User.hbm.xml"/> </session-factory></hibernate-configuration>-10-持久化類及映射文件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"/> <!--真實姓名--> <propertyname="realName"column="REALNAME"type="string"/> <!--地址--> <propertyname="address"column="ADDRESS"type="string"/> <!--手機--> <propertyname="mobile"column="MOBILE"type="string"/> </class></hibernate-mapping>-11-利用Configuration裝載配置每個配置文件對應一個Configuration對象,代表一個應用程序到數(shù)據(jù)庫的映射配置//實例化ConfigurationConfigurationconfiguration=newConfiguration();//加載hibernate.cfg.xml文件configuration.configure("/hibernate.cfg.xml");-12-利用SessionFactory創(chuàng)建SessionSessionFactorysessionFactory=configuration.buildSessionFactory();//實例化SessionSessionsession=sessionFactory.openSession();SessionFactory對象是Hibernate進行持久化操作所必須的對象,該對象是整個數(shù)據(jù)庫映射關系經(jīng)編譯后形成的內(nèi)存鏡像-13-利用Session操作數(shù)據(jù)庫Session對象是Hibernate持久化操作的關鍵對象,是Hibernate持久化操作的基礎,是應用程序與數(shù)據(jù)庫之間交互操作的一個單線程對象持久化對象的生命周期、事務的管理、對象的查詢、更新和刪除都是通過Session對象完成Session對象封裝了JDBC連接,具有一個一級緩存,在顯式執(zhí)行flush方法之前,所有持久化操作的數(shù)據(jù)都在Session對象的緩存中方法功能說明save()保存持久化對象,在數(shù)據(jù)庫中新增一條記錄get()獲取數(shù)據(jù)庫中的一條記錄,當未找到符合條件的持久化對象時返回nullload()獲取數(shù)據(jù)庫中的一條記錄,當未找到符合條件的持久化對象時會拋出異常update()更新數(shù)據(jù)庫中對應的數(shù)據(jù)delete()刪除數(shù)據(jù)庫中的一條記錄-14-利用Transaction管理事務Transaction對象主要用于管理事務,所有持久化操作都需要在事務管理下進行創(chuàng)建Configuration并裝載配置創(chuàng)建SessionFactory對象打開Session開始事務持久化操作提交事務關閉Session示例5.5CustomerTest//開始一個事務Transactiontrans=session.beginTransaction();//多個持久化操作......//回滾事務trans.rollback();//提交事務mit();-15-HQL查詢HibernateQueryLanguage支持各種條件查詢、連接查詢和子查詢支持分頁、分組查詢支持各種聚集函數(shù)和自定義函數(shù)支持動態(tài)綁定查詢參數(shù)Queryquery=session.createQuery("fromCustomer");//執(zhí)行查詢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查詢Criteria提供面向?qū)ο蟮牟樵兎绞紺riteriacriteria=session.createCriteria(Customer.class);//執(zhí)行查詢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é)合使用,一起作為配置文件屬性名功能說明hibernate.dialect針對不同的數(shù)據(jù)庫提供不同的方言類hibernate.connection.driver_class數(shù)據(jù)庫驅(qū)動類hibernate.connection.url連接數(shù)據(jù)庫的URLhibernate.connection.username連接數(shù)據(jù)庫的用戶名hibernate.connection.password連接數(shù)據(jù)庫的密碼hibernate.connection.pool_size數(shù)據(jù)庫連接池的最大容量hibernate.connection.datasource數(shù)據(jù)源的JNDI名字hibernate.show_sql是否輸出Hibernate操作數(shù)據(jù)庫使用的SQL語句hibernate.format_sql是否格式化輸出的SQL語句hibernate.hbm2ddl.auto自頂向下,從持久化類到數(shù)據(jù)庫表的操作-18-Hibernate映射文件映射文件的根元素是<hibernate-mapping>,該元素下可以擁有多個<class>子元素,每個class元素對應一個持久化類的映射,即將類和表之間的關系進行映射屬性名功能說明schema指定映射數(shù)據(jù)庫的schema名catalog指定映射數(shù)據(jù)庫的Catalog名default-cascade設置Hibernate默認的級聯(lián)風格,默認值是nonedefault-access設置默認屬性訪問策略,默認值為propertydefault-lazy設置默認延遲加載策略,默認值為trueauto-import是否允許使用非全限定的類名,默認值為truepackage指定一個包名,對于映射文件中非全限定的類名,默認在該包下-19-主鍵生成Hibernate映射文件中<id>元素定義了持久化類的標識符屬性(主鍵),其generator子元素則用來設置當前持久化類的標識符屬性的生成策略類型名功能說明increment獲取數(shù)據(jù)庫表中所有主鍵中的最大值,在最大值基礎上加1identity自動增長。MSSQLServer、MySQL和DB2等數(shù)據(jù)庫中可以設置表的某個字段(列)的數(shù)值自動增長。sequence序列。Oracle、DB2等數(shù)據(jù)庫可以創(chuàng)建一個序列,然后從序列中獲取當前序號作為主鍵值hilo“高/低位”高效算法產(chǎn)生主鍵值。seqhilo與hilo類似,但使用指定的sequence獲取高位值。uuid采用128位的UUID算法生成一個字符串類型的主鍵guid采用GUID字符串產(chǎn)生主鍵值native由Hibernate根據(jù)所使用的數(shù)據(jù)庫支持能力自動選擇assigned指派值foreign通過的關聯(lián)持久化對象為主鍵賦值-20-集合映射Hibernate要求使用集合接口來聲明集合屬性,例如List、Set、Map接口等。對于不同的集合接口,在Hibernate映射文件中需要采用不同的集合映射元素集合映射元素集合屬性特性<list>java.util.List集合中的元素可以重復,可以通過索引存取元素<set>java.util.Set集合中的元素不重復<map>java.util.Map集合中的元素是以key-value形式存放<array>數(shù)組可以是對象數(shù)組或基本數(shù)據(jù)類型的數(shù)組<primitive-array>基本數(shù)據(jù)類型的數(shù)組基本數(shù)據(jù)類型的數(shù)組,例如:int[]、char[]等<bag>java.util.Collection無序集合<idbag>java.util.Collection無序集合,但可以為集合增加邏輯次序-21-持久化對象持久化類都是普通的、傳統(tǒng)的Java對象(POJO)開發(fā)應遵守如下規(guī)則:提供一個無參數(shù)的構(gòu)造方法(默認構(gòu)造方法)提供一個標識屬性,通常映射到數(shù)據(jù)庫表中的主鍵每個屬性提供setter和getter方法持久化類是非final類持久化類需要實現(xiàn)Serializable接口,使持久化對象可序列化

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

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論