第一章Hibernate入門及基本操作_第1頁
第一章Hibernate入門及基本操作_第2頁
第一章Hibernate入門及基本操作_第3頁
第一章Hibernate入門及基本操作_第4頁
第一章Hibernate入門及基本操作_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(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的缺點(diǎn)開發(fā)效率低代碼冗余pstmt的setXX方法方法參數(shù)冗余的getXX方法如果POJO的屬性很多,代碼增加重復(fù)性工作多能否使用對(duì)象將POJO作為參數(shù),簡單的完成增刪改查操作?什么是ORMORM:ObjectRelationalMapping(對(duì)象-關(guān)系映射)可以理解為一種數(shù)據(jù)持久化技術(shù),其主要是把對(duì)象模型,例如JavaBean對(duì)象,和關(guān)系型數(shù)據(jù)庫的表建立對(duì)應(yīng)關(guān)系,并且提供了一個(gè)通過JavaBean對(duì)象去操作數(shù)據(jù)庫表的機(jī)制ORM優(yōu)點(diǎn):ORM在對(duì)象模型和關(guān)系數(shù)據(jù)庫表之間建立了一座橋梁程序員就不需要再使用SQL語句操作數(shù)據(jù)庫中的表直接操作JavaBean對(duì)象就可以實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)、查詢、更改和刪除等操作。常見的ORM框架常見的ORM框架HibernateiBatisToplinkCayennejRelationalFrameworkApacheOJBHibernate簡介Hibernate是對(duì)象/關(guān)系映射(ORM)的解決方案Hibernate是Java應(yīng)用和關(guān)系數(shù)據(jù)庫之間的橋梁,負(fù)責(zé)將Java對(duì)象和關(guān)系數(shù)據(jù)之間的映射。Hibernate的目標(biāo)是成為Java平臺(tái)管理數(shù)據(jù)持久性問題的完整解決方案Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它是對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝使Java開發(fā)人員更加專注于業(yè)務(wù)的熟悉和處理,而非對(duì)數(shù)據(jù)庫的基本操作,同時(shí)也能讓開發(fā)人員以面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫。Hibernate簡介Hibernate作者——GavinKingHibernate創(chuàng)始人《Hibernateinaction》作者EJB3.0的Entitybeanspecification的實(shí)際領(lǐng)導(dǎo)人(sun任命的領(lǐng)導(dǎo)人是LindaDeMichiel)參加了XDoclet和Middlegen的開發(fā)2003年9月加入JBoss,全職進(jìn)行Hibernate開發(fā)Hibernate一個(gè)開發(fā)源代碼的對(duì)象關(guān)系映射框架對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝將JavaBean對(duì)象和數(shù)據(jù)庫的表建立對(duì)應(yīng)關(guān)系Hibernate簡介Hibernate資源下載http://最新版本為4.2.7最新穩(wěn)定版本為4.2.3但使用最多最穩(wěn)定的還是3.1.3Hibernate優(yōu)勢(shì)Hibernate是一個(gè)優(yōu)秀的Java持久化層解決方案是當(dāng)今主流的對(duì)象—關(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ū)動(dòng)使用的不同數(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文件第一個(gè)Hibernate項(xiàng)目搭建一個(gè)Hibernate應(yīng)用需要以下步驟:步驟一、新建一個(gè)Java項(xiàng)目或者web項(xiàng)目步驟二、為新建項(xiàng)目添加Hibernate支持添加需要的jar文件Hibernate3.jarrequired/*.jar在classpath下加入hibernate.cfg.xml第一個(gè)Hibernate項(xiàng)目步驟三、配置hibernate.cfg.xml為Hibernate指定數(shù)據(jù)庫驅(qū)動(dòng)類名為Hibernate指定數(shù)據(jù)庫URL為Hibernate指定數(shù)據(jù)庫用戶名為Hibernate指定數(shù)據(jù)庫用戶口令為Hibernate指定數(shù)據(jù)庫方言第一個(gè)Hibernate應(yīng)用步驟四、創(chuàng)建一個(gè)實(shí)體類Student創(chuàng)建Student類提供getter和setter方法第一個(gè)Hibernate應(yīng)用步驟五、創(chuàng)建Student.hbm.xml映射文件為Student創(chuàng)建映射文件映射文件的命名規(guī)則為實(shí)體類名.hbm.xml第一個(gè)Hibernate應(yīng)用步驟五、將Student.hbm.xml映射文件配置到hibernate.cfg.xml文件中步驟六、測(cè)試應(yīng)用。持久化與ORM持久化將程序中數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制持久化與ORM持久化層JDBC就是一種持久化機(jī)制將程序數(shù)據(jù)直接保存成文本文件也是持久化機(jī)制的一種實(shí)現(xiàn)在分層結(jié)構(gòu)中,DAO層(數(shù)據(jù)訪問層)也被稱為持久化層持久化完成的操作將對(duì)象保存到關(guān)系型數(shù)據(jù)庫中將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)讀取出來 以對(duì)象的形式封裝持久化與ORMORM(ObjectRelationalMapping,對(duì)象關(guān)系映射)編寫程序的時(shí)候,以面向?qū)ο蟮姆绞教幚頂?shù)據(jù)保存數(shù)據(jù)的時(shí)候,卻以關(guān)系型數(shù)據(jù)庫的方式存儲(chǔ)ORM解決方案包含下面四個(gè)部分在持久化對(duì)象上執(zhí)行基本增、刪、改、查操作的API用于對(duì)持久化對(duì)象或?qū)傩圆樵兊囊环N語言或者API用于實(shí)體關(guān)系映射的工具能夠與事務(wù)對(duì)象交互、執(zhí)行檢查、延遲加載以及其他優(yōu)化功能持久化與ORM持久化將程序中數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制Hibernate對(duì)象的三種狀態(tài)通過session對(duì)實(shí)體對(duì)象進(jìn)行CRUD操作之后,該實(shí)體對(duì)象可能會(huì)經(jīng)歷三種狀態(tài)的轉(zhuǎn)換Transient:瞬時(shí)狀態(tài)(瞬態(tài))沒有進(jìn)行持久化,也沒有與任何session關(guān)聯(lián)Persistent:持久化狀態(tài)同一個(gè)session進(jìn)行了關(guān)聯(lián)Detached:托管狀態(tài)(游離態(tài))已經(jīng)持久化,但是沒有和session進(jìn)行關(guān)聯(lián)實(shí)體映射配置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實(shí)體映射配置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)識(shí),只有在沒有其他進(jìn)程往同一張表中插入數(shù)據(jù)時(shí)才能使用在集群中不可使用identityMySQL、SQLServer支持的數(shù)據(jù)庫主鍵生成方式sequenceOracle數(shù)據(jù)庫支持的主鍵生成方式native主鍵的生成方式由數(shù)據(jù)庫平臺(tái)決定,如Oracle使用sequence,MySQL使用auto_increment跨數(shù)據(jù)庫平臺(tái)hilo使用高地位算法獲取主鍵uuid使用uuid算法生成主鍵guid使用guid算法生成主鍵聯(lián)合主鍵的映射方式極少數(shù)情況下,開發(fā)人員可能會(huì)遇見聯(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í)體中可以以組件的形式來映射數(shù)據(jù)庫中的聯(lián)合主鍵組件類,必須實(shí)現(xiàn)java.io.Serializable接口,同時(shí)要重寫equals和hasCode方法Hibernate核心APIorg.hibernate.cfg.Configuration顧名思義,Configuration負(fù)責(zé)管理Hibernate的配置信息,其中包括一些關(guān)鍵的屬性如:數(shù)據(jù)庫連接URL-hibernate.connetion.url數(shù)據(jù)庫驅(qū)動(dòng)程序類名-hibernate.connection.driver_class數(shù)據(jù)庫用戶名-hibernate.connection.username數(shù)據(jù)庫用戶口令-hibernate.connection.password數(shù)據(jù)庫方言-hibernate.

dialect使用Hibernate,必須提供以上基本的信息用于對(duì)特定數(shù)據(jù)庫的支持,已完成初始化工作。Hibernate核心APIorg.hibernate.cfg.Configuration在應(yīng)用中,需要使用Configuration的configure()搜尋并加載hibernate.cfg.xml,為后續(xù)操作提供基本配置通過Configuration對(duì)象調(diào)用buildSessionFactory()返回一個(gè)SessionFactory對(duì)象由于配置信息已經(jīng)由Hibernate維護(hù)并綁定,在返回的SessionFactory之上,因此一般情況下無需再對(duì)其進(jìn)行操作Hibernate核心APIorg.hibernate.SessionFactorySessionFactory負(fù)責(zé)創(chuàng)建Session實(shí)例。我們可以通過Configuration實(shí)例構(gòu)建SessionFactoryConfiguration實(shí)例config會(huì)根據(jù)當(dāng)前的配置信息,構(gòu)造SessionFactory實(shí)例并返回。SessionFactory一旦構(gòu)造完畢,即被賦予特定的配置信息Hibernate核心APIorg.hibernate.SessionSession是持久層操作的基礎(chǔ),相當(dāng)于JDBC中的ConnectionSession的生命周期是以事務(wù)的開始和結(jié)束來界定的Session完成的主要功能就是提供對(duì)實(shí)體對(duì)象的CRUD操作如將對(duì)應(yīng)的實(shí)體對(duì)象保存至數(shù)據(jù)庫save(Objecto)如將數(shù)據(jù)從數(shù)據(jù)庫中查詢出來load()和get()等如將數(shù)據(jù)從數(shù)據(jù)庫中刪除的方法delete()等SessionAPI方法說明save(Objecto)將對(duì)象進(jìn)行持久化操作delete(Objecto)刪除該實(shí)例對(duì)應(yīng)的數(shù)據(jù)庫記錄update(Objecto)更新指定對(duì)象對(duì)應(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ù)庫需要七個(gè)步驟(1)讀取并解析配置文件(2)讀取并解析映射信息,創(chuàng)建SessionFactory(3)打開Session(4)開始一個(gè)事務(wù)(增刪改操作必須,查詢操作可選)Configurationconf=newConfiguration().configure();SessionFactorysf=conf.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();使用Hibernate操作數(shù)據(jù)庫使用Hibernate操作數(shù)據(jù)庫需要七個(gè)步驟(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實(shí)例則不需要此步使用Hibernate實(shí)現(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.開始一個(gè)事務(wù)5.持久化操作6.提交事務(wù)6.回滾事務(wù)7.關(guān)閉session使用Hibernate實(shí)現(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í),需要先加載數(shù)據(jù)使用Hibernate實(shí)現(xiàn)查詢操作Session提供了兩種方法加載數(shù)據(jù)Objectget(Classclazz,Serializableid):通過實(shí)體類Class對(duì)象和ID加載數(shù)據(jù)Objectload(ClasstheClass,Serializableid):通過實(shí)體類Class對(duì)象和ID加載數(shù)據(jù)兩種方法加載數(shù)據(jù)的區(qū)別使用get方法加載數(shù)據(jù)時(shí),如果數(shù)據(jù)不存在,返回null對(duì)象使用load方法加載數(shù)據(jù)時(shí),如果數(shù)據(jù)不存在,系統(tǒng)就會(huì)拋出異常Configurationconf=null;SessionFactorysessio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論