版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Hibernate持久化框架
課程學習目標掌握Hibernate的基本配置掌握Hibernate的基本操作掌握Hibernate各種關系映射掌握Hibernate的HQL查詢掌握Hibernate的Criteria查詢掌握各種Hibernate優(yōu)化技術熟悉Hibernate的注解配置了解其他持久化技術的基本使用本階段課程介紹MVC框架Struts2.2.xORM框架Hibernate3.xBean管理Spring2.5主要內(nèi)容Hibernate簡介Hibernate的Xml配置方法ORM概述Hibernate應用步驟主鍵生成機制本講目標掌握Hibernate的基本配置方式理解ORM掌握Hibernate的基本操作和應用步驟掌握常用的主鍵生成機制JDBC的缺點開發(fā)效率低代碼冗余pstmt的setXX方法方法參數(shù)冗余的getXX方法如果POJO的屬性很多,代碼增加重復性工作多能否使用對象將POJO作為參數(shù),簡單的完成增刪改查操作?什么是ORMORM:ObjectRelationalMapping(對象-關系映射)可以理解為一種數(shù)據(jù)持久化技術,其主要是把對象模型,例如JavaBean對象,和關系型數(shù)據(jù)庫的表建立對應關系,并且提供了一個通過JavaBean對象去操作數(shù)據(jù)庫表的機制ORM優(yōu)點:ORM在對象模型和關系數(shù)據(jù)庫表之間建立了一座橋梁程序員就不需要再使用SQL語句操作數(shù)據(jù)庫中的表直接操作JavaBean對象就可以實現(xiàn)數(shù)據(jù)的存儲、查詢、更改和刪除等操作。常見的ORM框架常見的ORM框架HibernateiBatisToplinkCayennejRelationalFrameworkApacheOJBHibernate簡介Hibernate是對象/關系映射(ORM)的解決方案Hibernate是Java應用和關系數(shù)據(jù)庫之間的橋梁,負責將Java對象和關系數(shù)據(jù)之間的映射。Hibernate的目標是成為Java平臺管理數(shù)據(jù)持久性問題的完整解決方案Hibernate是一個開放源代碼的對象關系映射框架,它是對JDBC進行了非常輕量級的對象封裝使Java開發(fā)人員更加專注于業(yè)務的熟悉和處理,而非對數(shù)據(jù)庫的基本操作,同時也能讓開發(fā)人員以面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫。Hibernate簡介Hibernate作者——GavinKingHibernate創(chuàng)始人《Hibernateinaction》作者EJB3.0的Entitybeanspecification的實際領導人(sun任命的領導人是LindaDeMichiel)參加了XDoclet和Middlegen的開發(fā)2003年9月加入JBoss,全職進行Hibernate開發(fā)Hibernate一個開發(fā)源代碼的對象關系映射框架對JDBC進行了非常輕量級的對象封裝將JavaBean對象和數(shù)據(jù)庫的表建立對應關系Hibernate簡介Hibernate資源下載http://最新版本為4.2.7最新穩(wěn)定版本為4.2.3但使用最多最穩(wěn)定的還是3.1.3Hibernate優(yōu)勢Hibernate是一個優(yōu)秀的Java持久化層解決方案是當今主流的對象—關系映射工具Hibernate簡化了JDBC繁瑣的編碼Hibernate將數(shù)據(jù)庫的連接信息都存放在配置文件中Sessionsession=HiberanteUtil.getSession();Queryquery=session.createQuery("fromUser");List<User>users=(List<User>)query.list();Hibernate配置文件hibernate.cfg.xml文件映射文件的配置(*.hbm.xml)<propertyname="dialect">org.hibernate.dialect.Oracle9Dialect</property><propertyname="connection.url">jdbc:oracle:thin:@88:1521:ORCL</property><propertyname="connection.username">jbit</property><propertyname="connection.password">bdqn</property><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>數(shù)據(jù)庫URL數(shù)據(jù)庫用戶名數(shù)據(jù)庫密碼數(shù)據(jù)庫驅(qū)動使用的不同數(shù)據(jù)庫類型hibernate.cfg.xml文件<hibernate-mapping><classname="cn.jbit.houserent.bean.User"table="users"schema="jbit"><idname="id"type="java.lang.Long"><columnname="id"/><generatorclass="native"/></id><propertyname="password"type="java.lang.String"lazy="false"><columnname="password"length="50"not-null="true"/></property><propertyname="telephone"type="java.lang.String"lazy="false"><columnname="telephone"length="12"/></property><propertyname="username"type="java.lang.String"lazy="false"><columnname="username"length="50"/></property></class></hibernate-mapping>User.hbm.xml文件第一個Hibernate項目搭建一個Hibernate應用需要以下步驟:步驟一、新建一個Java項目或者web項目步驟二、為新建項目添加Hibernate支持添加需要的jar文件Hibernate3.jarrequired/*.jar在classpath下加入hibernate.cfg.xml第一個Hibernate項目步驟三、配置hibernate.cfg.xml為Hibernate指定數(shù)據(jù)庫驅(qū)動類名為Hibernate指定數(shù)據(jù)庫URL為Hibernate指定數(shù)據(jù)庫用戶名為Hibernate指定數(shù)據(jù)庫用戶口令為Hibernate指定數(shù)據(jù)庫方言第一個Hibernate應用步驟四、創(chuàng)建一個實體類Student創(chuàng)建Student類提供getter和setter方法第一個Hibernate應用步驟五、創(chuàng)建Student.hbm.xml映射文件為Student創(chuàng)建映射文件映射文件的命名規(guī)則為實體類名.hbm.xml第一個Hibernate應用步驟五、將Student.hbm.xml映射文件配置到hibernate.cfg.xml文件中步驟六、測試應用。持久化與ORM持久化將程序中數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機制持久化與ORM持久化層JDBC就是一種持久化機制將程序數(shù)據(jù)直接保存成文本文件也是持久化機制的一種實現(xiàn)在分層結構中,DAO層(數(shù)據(jù)訪問層)也被稱為持久化層持久化完成的操作將對象保存到關系型數(shù)據(jù)庫中將關系型數(shù)據(jù)庫中的數(shù)據(jù)讀取出來 以對象的形式封裝持久化與ORMORM(ObjectRelationalMapping,對象關系映射)編寫程序的時候,以面向?qū)ο蟮姆绞教幚頂?shù)據(jù)保存數(shù)據(jù)的時候,卻以關系型數(shù)據(jù)庫的方式存儲ORM解決方案包含下面四個部分在持久化對象上執(zhí)行基本增、刪、改、查操作的API用于對持久化對象或?qū)傩圆樵兊囊环N語言或者API用于實體關系映射的工具能夠與事務對象交互、執(zhí)行檢查、延遲加載以及其他優(yōu)化功能持久化與ORM持久化將程序中數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機制Hibernate對象的三種狀態(tài)通過session對實體對象進行CRUD操作之后,該實體對象可能會經(jīng)歷三種狀態(tài)的轉(zhuǎn)換Transient:瞬時狀態(tài)(瞬態(tài))沒有進行持久化,也沒有與任何session關聯(lián)Persistent:持久化狀態(tài)同一個session進行了關聯(lián)Detached:托管狀態(tài)(游離態(tài))已經(jīng)持久化,但是沒有和session進行關聯(lián)實體映射配置Hibernate內(nèi)置類型映射Hibernate類型Java類型SQL類型int/integerint/Integerintegerlonglong/Longbigintshortshort/Shortsmallintbytebyte/Bytetinyintfloatfloat/Floatfloatdoubledouble/Doubledoublebig_decimaljava.math.BigDecimalNUMERICcharacterchar/Characterchar(1)stringjava.lang.Stringvarchar(255)booleanboolean/Booleanbityes_noboolean/Booleanbittrue_falseboolean/Booleanbit實體映射配置Hibernate內(nèi)置類型映射Hibernate類型Java類型SQL類型datejava.util.Date或者java.sql.Datedatetimejava.util.Date或者java.sql.Timetimetimestampjava.sql.Timestamptimestamp
calendarjava.util.Calendartimestamp
calendar_datejava.util.CalendardateId生成策略Id生成策略也叫主鍵生成策略以下說明基于hbm.xml的主鍵生成策略<idname="id"type="java.lang.Integer">
<columnname="ID"precision="8"scale="0"/>
<generatorclass="native"/>
</id>Id生成策略在Hibernate的映射文件中通過指定Generator,來定義主鍵的生成方式,Hibernate中可以定義的主鍵生成方式有:生成器類型名說明備注increment用于long、short、int類型唯一標識,只有在沒有其他進程往同一張表中插入數(shù)據(jù)時才能使用在集群中不可使用identityMySQL、SQLServer支持的數(shù)據(jù)庫主鍵生成方式sequenceOracle數(shù)據(jù)庫支持的主鍵生成方式native主鍵的生成方式由數(shù)據(jù)庫平臺決定,如Oracle使用sequence,MySQL使用auto_increment跨數(shù)據(jù)庫平臺hilo使用高地位算法獲取主鍵uuid使用uuid算法生成主鍵guid使用guid算法生成主鍵聯(lián)合主鍵的映射方式極少數(shù)情況下,開發(fā)人員可能會遇見聯(lián)合主鍵的應用,聯(lián)合主鍵可以使用如下語法在hbm.xml中定義<composite-idmapped="true"> <key-propertyname="firstName"></key-property> <key-propertyname="lastName"></key-property></composite-id>聯(lián)合主鍵映射方式在實體中可以以組件的形式來映射數(shù)據(jù)庫中的聯(lián)合主鍵組件類,必須實現(xiàn)java.io.Serializable接口,同時要重寫equals和hasCode方法Hibernate核心APIorg.hibernate.cfg.Configuration顧名思義,Configuration負責管理Hibernate的配置信息,其中包括一些關鍵的屬性如:數(shù)據(jù)庫連接URL-hibernate.connetion.url數(shù)據(jù)庫驅(qū)動程序類名-hibernate.connection.driver_class數(shù)據(jù)庫用戶名-hibernate.connection.username數(shù)據(jù)庫用戶口令-hibernate.connection.password數(shù)據(jù)庫方言-hibernate.
dialect使用Hibernate,必須提供以上基本的信息用于對特定數(shù)據(jù)庫的支持,已完成初始化工作。Hibernate核心APIorg.hibernate.cfg.Configuration在應用中,需要使用Configuration的configure()搜尋并加載hibernate.cfg.xml,為后續(xù)操作提供基本配置通過Configuration對象調(diào)用buildSessionFactory()返回一個SessionFactory對象由于配置信息已經(jīng)由Hibernate維護并綁定,在返回的SessionFactory之上,因此一般情況下無需再對其進行操作Hibernate核心APIorg.hibernate.SessionFactorySessionFactory負責創(chuàng)建Session實例。我們可以通過Configuration實例構建SessionFactoryConfiguration實例config會根據(jù)當前的配置信息,構造SessionFactory實例并返回。SessionFactory一旦構造完畢,即被賦予特定的配置信息Hibernate核心APIorg.hibernate.SessionSession是持久層操作的基礎,相當于JDBC中的ConnectionSession的生命周期是以事務的開始和結束來界定的Session完成的主要功能就是提供對實體對象的CRUD操作如將對應的實體對象保存至數(shù)據(jù)庫save(Objecto)如將數(shù)據(jù)從數(shù)據(jù)庫中查詢出來load()和get()等如將數(shù)據(jù)從數(shù)據(jù)庫中刪除的方法delete()等SessionAPI方法說明save(Objecto)將對象進行持久化操作delete(Objecto)刪除該實例對應的數(shù)據(jù)庫記錄update(Objecto)更新指定對象對應的數(shù)據(jù)庫記錄saveOrUpload(Objecto)更新或者新增一條記錄get(Classclazz,Serializableid)根據(jù)指定id獲取一條數(shù)據(jù)庫記錄load(Classclazz,Serializableid)根據(jù)指定id加載一條數(shù)據(jù)庫記錄flush()強制刷新緩沖區(qū)clear()強制清空緩沖區(qū)使用Hibernate操作數(shù)據(jù)庫使用Hibernate操作數(shù)據(jù)庫需要七個步驟(1)讀取并解析配置文件(2)讀取并解析映射信息,創(chuàng)建SessionFactory(3)打開Session(4)開始一個事務(增刪改操作必須,查詢操作可選)Configurationconf=newConfiguration().configure();SessionFactorysf=conf.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();使用Hibernate操作數(shù)據(jù)庫使用Hibernate操作數(shù)據(jù)庫需要七個步驟(5)數(shù)據(jù)庫操作(6)提交事務(回滾事務)(7)關閉sessionsession.save(user);//或其它操作mit();(tx.rollback();)session.close();如果Hibernate配置文件中,current_session_context_class參數(shù)設置為thread并采用SessionFactory的getCurrentSession()方法獲的Session實例則不需要此步使用Hibernate實現(xiàn)增加用戶Configurationconf=null;SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{conf=newConfiguration().configure();sessionFactory=conf.buildSessionFactory();session=sessionFactory.openSession();
tx=session.beginTransaction();
session.save(user);
mit();}catch(HibernateExceptione){tx.rollback();e.printStackTrace();}finally{
session.close();
sessionFactory.close();}1.讀取配置文件2.創(chuàng)建SessionFactory3.打開session4.開始一個事務5.持久化操作6.提交事務6.回滾事務7.關閉session使用Hibernate實現(xiàn)用戶的修改、刪除Configurationconf=null;SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{conf=newConfiguration().configure();sessionFactory=conf.buildSessionFactory();session=sessionFactory.openSession();
tx=session.beginTransaction();
session.update(user);
mit();}catch(HibernateExceptione){tx.rollback();e.printStackTrace();}finally{
session.close();
sessionFactory.close();}修改用戶修改用戶信息Configurationconf=null;SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{conf=newConfiguration().configure();sessionFactory=conf.buildSessionFactory();session=sessionFactory.openSession();
tx=session.beginTransaction();
session.delete(user);
mit();}catch(HibernateExceptione){tx.rollback();e.printStackTrace();}finally{
session.close();
sessionFactory.close();}刪除用戶刪除用戶信息增、刪、改操作一定要在事務環(huán)境中完成修改、刪除數(shù)據(jù)時,需要先加載數(shù)據(jù)使用Hibernate實現(xiàn)查詢操作Session提供了兩種方法加載數(shù)據(jù)Objectget(Classclazz,Serializableid):通過實體類Class對象和ID加載數(shù)據(jù)Objectload(ClasstheClass,Serializableid):通過實體類Class對象和ID加載數(shù)據(jù)兩種方法加載數(shù)據(jù)的區(qū)別使用get方法加載數(shù)據(jù)時,如果數(shù)據(jù)不存在,返回null對象使用load方法加載數(shù)據(jù)時,如果數(shù)據(jù)不存在,系統(tǒng)就會拋出異常Configurationconf=null;SessionFactorysessio
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)造性學習環(huán)境下的學生成長與發(fā)展
- 交通行業(yè)中的安全文化推廣
- 不同文化背景下的服務溝通策略解析
- 從太陽到家溫暖你的每一天-家用太陽能供暖系統(tǒng)介紹
- 體育與教育融合的未來趨勢分析
- 辦公區(qū)域?qū)嶒炇覂?nèi)務管理與規(guī)范
- 電子產(chǎn)品質(zhì)檢工藝流程
- 從手工到智能工業(yè)4.0時代辦公生產(chǎn)管理轉(zhuǎn)變
- 辦公室中的學生自助餐廳管理與服務提升
- 兒童數(shù)學邏輯能力培養(yǎng)路徑研究
- GB/T 44360-2024風能發(fā)電系統(tǒng)智能風力發(fā)電場數(shù)據(jù)采集技術規(guī)范
- 雅馬哈RX-V365使用說明書
- 陽光食品APP培訓考核題庫(含答案)食品生產(chǎn)企業(yè)端
- 廣元市2024年專業(yè)技術人員公需科目繼續(xù)教育試卷及參考答案
- 2024年全國國家版圖知識競賽題庫及答案
- 部編初中歷史2024年秋季新教材七上歷史《教材分析和教學建議》
- PLC機械手臂搬運加工標準流程控制
- (正式版)FZ∕T 64111-2024 衛(wèi)生巾(護墊)用非織造布
- 肅南裕固族民俗文化旅游資源開發(fā)研究
- 食品級塑料材質(zhì)
- JTG 3432-2024 公路工程集料試驗規(guī)程(正式版)
評論
0/150
提交評論