版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Hibernate持久化框架
課程學(xué)習(xí)目標(biāo)掌握Hibernate的基本配置掌握Hibernate的基本操作掌握Hibernate各種關(guān)系映射掌握Hibernate的HQL查詢掌握Hibernate的Criteria查詢掌握各種Hibernate優(yōu)化技術(shù)熟悉Hibernate的注解配置了解其他持久化技術(shù)的基本使用本階段課程介紹MVC框架Struts2.2.xORM框架Hibernate3.xBean管理Spring2.5主要內(nèi)容Hibernate簡介Hibernate的Xml配置方法ORM概述Hibernate應(yīng)用步驟主鍵生成機(jī)制本講目標(biāo)掌握Hibernate的基本配置方式理解ORM掌握Hibernate的基本操作和應(yīng)用步驟掌握常用的主鍵生成機(jī)制JDBC的缺點開發(fā)效率低代碼冗余pstmt的setXX方法方法參數(shù)冗余的getXX方法如果POJO的屬性很多,代碼增加重復(fù)性工作多能否使用對象將POJO作為參數(shù),簡單的完成增刪改查操作?什么是ORMORM:ObjectRelationalMapping(對象-關(guān)系映射)可以理解為一種數(shù)據(jù)持久化技術(shù),其主要是把對象模型,例如JavaBean對象,和關(guān)系型數(shù)據(jù)庫的表建立對應(yīng)關(guān)系,并且提供了一個通過JavaBean對象去操作數(shù)據(jù)庫表的機(jī)制ORM優(yōu)點:ORM在對象模型和關(guān)系數(shù)據(jù)庫表之間建立了一座橋梁程序員就不需要再使用SQL語句操作數(shù)據(jù)庫中的表直接操作JavaBean對象就可以實現(xiàn)數(shù)據(jù)的存儲、查詢、更改和刪除等操作。常見的ORM框架常見的ORM框架HibernateiBatisToplinkCayennejRelationalFrameworkApacheOJBHibernate簡介Hibernate是對象/關(guān)系映射(ORM)的解決方案Hibernate是Java應(yīng)用和關(guān)系數(shù)據(jù)庫之間的橋梁,負(fù)責(zé)將Java對象和關(guān)系數(shù)據(jù)之間的映射。Hibernate的目標(biāo)是成為Java平臺管理數(shù)據(jù)持久性問題的完整解決方案Hibernate是一個開放源代碼的對象關(guān)系映射框架,它是對JDBC進(jìn)行了非常輕量級的對象封裝使Java開發(fā)人員更加專注于業(yè)務(wù)的熟悉和處理,而非對數(shù)據(jù)庫的基本操作,同時也能讓開發(fā)人員以面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫。Hibernate簡介Hibernate作者——GavinKingHibernate創(chuàng)始人《Hibernateinaction》作者EJB3.0的Entitybeanspecification的實際領(lǐng)導(dǎo)人(sun任命的領(lǐng)導(dǎo)人是LindaDeMichiel)參加了XDoclet和Middlegen的開發(fā)2003年9月加入JBoss,全職進(jìn)行Hibernate開發(fā)Hibernate一個開發(fā)源代碼的對象關(guān)系映射框架對JDBC進(jìn)行了非常輕量級的對象封裝將JavaBean對象和數(shù)據(jù)庫的表建立對應(yīng)關(guān)系Hibernate簡介Hibernate資源下載http://最新版本為4.2.7最新穩(wěn)定版本為4.2.3但使用最多最穩(wěn)定的還是3.1.3Hibernate優(yōu)勢Hibernate是一個優(yōu)秀的Java持久化層解決方案是當(dāng)今主流的對象—關(guān)系映射工具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應(yīng)用需要以下步驟:步驟一、新建一個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應(yīng)用步驟四、創(chuàng)建一個實體類Student創(chuàng)建Student類提供getter和setter方法第一個Hibernate應(yīng)用步驟五、創(chuàng)建Student.hbm.xml映射文件為Student創(chuàng)建映射文件映射文件的命名規(guī)則為實體類名.hbm.xml第一個Hibernate應(yīng)用步驟五、將Student.hbm.xml映射文件配置到hibernate.cfg.xml文件中步驟六、測試應(yīng)用。持久化與ORM持久化將程序中數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制持久化與ORM持久化層JDBC就是一種持久化機(jī)制將程序數(shù)據(jù)直接保存成文本文件也是持久化機(jī)制的一種實現(xiàn)在分層結(jié)構(gòu)中,DAO層(數(shù)據(jù)訪問層)也被稱為持久化層持久化完成的操作將對象保存到關(guān)系型數(shù)據(jù)庫中將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)讀取出來 以對象的形式封裝持久化與ORMORM(ObjectRelationalMapping,對象關(guān)系映射)編寫程序的時候,以面向?qū)ο蟮姆绞教幚頂?shù)據(jù)保存數(shù)據(jù)的時候,卻以關(guān)系型數(shù)據(jù)庫的方式存儲ORM解決方案包含下面四個部分在持久化對象上執(zhí)行基本增、刪、改、查操作的API用于對持久化對象或?qū)傩圆樵兊囊环N語言或者API用于實體關(guān)系映射的工具能夠與事務(wù)對象交互、執(zhí)行檢查、延遲加載以及其他優(yōu)化功能持久化與ORM持久化將程序中數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制Hibernate對象的三種狀態(tài)通過session對實體對象進(jìn)行CRUD操作之后,該實體對象可能會經(jīng)歷三種狀態(tài)的轉(zhuǎn)換Transient:瞬時狀態(tài)(瞬態(tài))沒有進(jìn)行持久化,也沒有與任何session關(guān)聯(lián)Persistent:持久化狀態(tài)同一個session進(jìn)行了關(guān)聯(lián)Detached:托管狀態(tài)(游離態(tài))已經(jīng)持久化,但是沒有和session進(jìn)行關(guān)聯(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類型唯一標(biāo)識,只有在沒有其他進(jìn)程往同一張表中插入數(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)合主鍵的應(yīng)用,聯(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負(fù)責(zé)管理Hibernate的配置信息,其中包括一些關(guān)鍵的屬性如:數(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在應(yīng)用中,需要使用Configuration的configure()搜尋并加載hibernate.cfg.xml,為后續(xù)操作提供基本配置通過Configuration對象調(diào)用buildSessionFactory()返回一個SessionFactory對象由于配置信息已經(jīng)由Hibernate維護(hù)并綁定,在返回的SessionFactory之上,因此一般情況下無需再對其進(jìn)行操作Hibernate核心APIorg.hibernate.SessionFactorySessionFactory負(fù)責(zé)創(chuàng)建Session實例。我們可以通過Configuration實例構(gòu)建SessionFactoryConfiguration實例config會根據(jù)當(dāng)前的配置信息,構(gòu)造SessionFactory實例并返回。SessionFactory一旦構(gòu)造完畢,即被賦予特定的配置信息Hibernate核心APIorg.hibernate.SessionSession是持久層操作的基礎(chǔ),相當(dāng)于JDBC中的ConnectionSession的生命周期是以事務(wù)的開始和結(jié)束來界定的Session完成的主要功能就是提供對實體對象的CRUD操作如將對應(yīng)的實體對象保存至數(shù)據(jù)庫save(Objecto)如將數(shù)據(jù)從數(shù)據(jù)庫中查詢出來load()和get()等如將數(shù)據(jù)從數(shù)據(jù)庫中刪除的方法delete()等SessionAPI方法說明save(Objecto)將對象進(jìn)行持久化操作delete(Objecto)刪除該實例對應(yīng)的數(shù)據(jù)庫記錄update(Objecto)更新指定對象對應(yīng)的數(shù)據(jù)庫記錄saveOrUpload(Objecto)更新或者新增一條記錄get(Classclazz,Serializableid)根據(jù)指定id獲取一條數(shù)據(jù)庫記錄load(Classclazz,Serializableid)根據(jù)指定id加載一條數(shù)據(jù)庫記錄flush()強(qiáng)制刷新緩沖區(qū)clear()強(qiáng)制清空緩沖區(qū)使用Hibernate操作數(shù)據(jù)庫使用Hibernate操作數(shù)據(jù)庫需要七個步驟(1)讀取并解析配置文件(2)讀取并解析映射信息,創(chuàng)建SessionFactory(3)打開Session(4)開始一個事務(wù)(增刪改操作必須,查詢操作可選)Configurationconf=newConfiguration().configure();SessionFactorysf=conf.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();使用Hibernate操作數(shù)據(jù)庫使用Hibernate操作數(shù)據(jù)庫需要七個步驟(5)數(shù)據(jù)庫操作(6)提交事務(wù)(回滾事務(wù))(7)關(guān)閉sessionsession.save(user);//或其它操作mit();(tx.rollback();)session.close();如果Hibernate配置文件中,current_session_context_class參數(shù)設(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.開始一個事務(wù)5.持久化操作6.提交事務(wù)6.回滾事務(wù)7.關(guān)閉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();}刪除用戶刪除用戶信息增、刪、改操作一定要在事務(wù)環(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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資經(jīng)理面試題及答案詳解
- 2025年物流信息化管理系統(tǒng)項目可行性研究報告
- 2025年醫(yī)療健康信息平臺構(gòu)建可行性研究報告
- 2025年智慧校園解決方案開發(fā)項目可行性研究報告
- 2026年福州黎明職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫附答案詳解
- 2026年浙江省湖州市單招職業(yè)傾向性考試題庫帶答案詳解
- 2026年黑龍江農(nóng)墾職業(yè)學(xué)院單招職業(yè)傾向性測試題庫含答案詳解
- 2026年寧德師范學(xué)院單招職業(yè)技能測試題庫及參考答案詳解1套
- 2026年桂林山水職業(yè)學(xué)院單招職業(yè)技能測試題庫參考答案詳解
- 2026年上海杉達(dá)學(xué)院單招職業(yè)技能測試題庫帶答案詳解
- 【MOOC】線性代數(shù)典型習(xí)題講解-北京化工大學(xué) 中國大學(xué)慕課MOOC答案
- 大學(xué)體育-瑜伽學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 超星爾雅學(xué)習(xí)通《文獻(xiàn)信息檢索與利用(成都航空職業(yè)技術(shù)學(xué)院)》2024章節(jié)測試答案
- 21 小圣施威降大圣
- 【未知機(jī)構(gòu)】華為公司戰(zhàn)略規(guī)劃和落地方法之五看三定工具解析
- 企業(yè)微信指導(dǎo)手冊管理員版
- DL-T 2582.1-2022 水電站公用輔助設(shè)備運(yùn)行規(guī)程 第1部分:油系統(tǒng)
- (完整word版)勞動合同書(電子版)正規(guī)范本(通用版)
- 初中物理實驗通知單
- 勞務(wù)承包通用合同
- 電力系統(tǒng)繼電保護(hù)原理課程設(shè)計-110kV電網(wǎng)距離保護(hù)設(shè)計
評論
0/150
提交評論