




已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
J2EE架構(gòu)與程序設(shè)計(jì),第三講Hibernate,Hibernate簡介,Hibernate是一個(gè)持久化框架,主要用于ORM(Object/Relational Mapping)映射。 問題: 什么是持久化框架 為什么要用ORM Hibernate與EJB是什么關(guān)系,開發(fā)Hibernate程序基本步驟,配置Hibernate:指定數(shù)據(jù)庫連接,指定映射文件(默認(rèn)名:hibernate.cfg.xml) 建立映射文件:告訴Hibernate那個(gè)實(shí)體類對應(yīng)哪個(gè)表,哪個(gè)屬性對應(yīng)哪個(gè)字段 建立實(shí)體Bean 建立會(huì)話工廠:用對話工廠獲得Hibernate Session對象是個(gè)好習(xí)慣,因?yàn)樵诔绦蛑薪?jīng)常需要獲得Session 使用Hibernate操作數(shù)據(jù)庫,hibernate.cfg.xml, org.hibernate.dialect.MySQLDialect jdbc:mysql:/localhost/techsys root root com.mysql.jdbc.Driver ,Role.hbm.xml, 資料:generator詳解,實(shí)例:修改書籍查詢,對角色表(Role)的,增刪改查 Chapter17/addrecord.jsp,持久化對象之間的關(guān)系,不同的session加載同一條數(shù)據(jù)形成的實(shí)體對象是不同的,反之是相同的。 Session session1=sessionFactory.openSession(); Session session2=sessionFactory.openSession(); User user1=(User)session1.get(User.class,id); User user2=(User)session1.get(User.class,id); User user3=(User)session2.get(User.class,id); if(user1=user2) If(user1=user3) If(user1.equals(user3),session相關(guān)操作,加載實(shí)體: session.get、session.load 刷新實(shí)體: session.refresh 判斷是否有臟數(shù)據(jù): session.isDirty(); 強(qiáng)制持久化: session.flush,復(fù)合主鍵,先把多個(gè)主鍵屬性封裝在一個(gè)類中 利用composite-id標(biāo)簽配置復(fù)合主鍵 ,使用,使用實(shí)例PKAction.java,組件映射,若Teacher和Student類中都有firstName和lastName屬性,則可以用一個(gè)Name屬性進(jìn)行封裝 Public class Name private String firstName;private String lastName Public class Teacher private Name name; private int courseID Public class Student private Name name; xml如下配置 ,基于注釋的組件映射,Embedded AttributeOverrides( AttributeOveride(name=“firstName”,column=Column(name=“firstName”) AttributeOveride(name=“l(fā)astName”,column=Column(name=“l(fā)astName”) ),多對一單向關(guān)聯(lián)關(guān)系,通常,對于數(shù)據(jù)庫中的關(guān)聯(lián)關(guān)系在Hibernate中我們通過組件的方式加以封裝,以此達(dá)到統(tǒng)一存取的目的。,Name:實(shí)體Bean的屬性名 Column:外鍵名 Class:關(guān)聯(lián)類的名稱 Cascade:該屬性指定哪些操作時(shí)級聯(lián)操作,上例中save-update表示在save或 update時(shí)候進(jìn)行級聯(lián)操作,基于注釋的多對一關(guān)系,ManyToOne Cascade(value=(org.hibernate.annotations.CascadeType.SAVE_UPDATE) JoinColumn(name=“customer_id“),其它關(guān)聯(lián)關(guān)系,一對多(one-to-many) 一對一(one-to-one),Hibernate查詢,標(biāo)準(zhǔn)查詢API(Criteria) HQL查詢 SQL查詢,HQL,Hql(Hibernate Query Language)是Hibernate框架提供的一種數(shù)據(jù)操作方式,其語法上非常接近SQL,不同的是HQL是面向?qū)ο蟮?,使用HQL可直接返回相應(yīng)的持久化對象。另外,Hibernate也可以將SQL查詢出來的數(shù)據(jù)轉(zhuǎn)換為持久化對象,注意:在HQL中實(shí)體Bean的名稱和屬性是區(qū)分大 小寫的,但HQL中的關(guān)鍵字不區(qū)分大小寫, 如from可以寫成From,HQL的使用,String queryString = “from Mykeys as model where = :name”;/創(chuàng)建HQL語句 Query queryObject = getSession().createQuery(queryString);/創(chuàng)建查詢對象 queryObject.setParameter(“name”, value);/設(shè)置參數(shù) queryObject.list();/執(zhí)行查詢 注意錯(cuò)誤:Exception in thread “main“ java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I,HQL查詢,不使用select:返回實(shí)體Bean對象列表 from orders 返回orders對象列表 使用select:返回某個(gè)屬性的值列表 select number from orders 則返回的orders中為String類型的列表,針對同名實(shí)體的查詢,在查詢時(shí)可以使用包指定查詢的類 select chapter17.entity.mymessage m,HQL分頁,利用Query的setFirstResult和setMaxResults方法進(jìn)行分頁 例: Session session=HibernateSessionFactory.getSession(); Query q=session.createQuery(“from Orders“); q.setFirstResult(1);/從第2條記錄開始 q.setMaxResults(2);/每頁取2條 List list=q.list();,查詢緩存,若使用Hibernate緩存查詢則Hibernate在執(zhí)行時(shí)會(huì)先在緩存中找尋先前執(zhí)行過的的同樣的HQL的查詢結(jié)果,若找到則直接從緩存中取數(shù)據(jù),從而達(dá)到快速查詢的目的,使用緩存,一、在配置文件中打開緩存并指定緩存類 true org.hibernate.cache.HashtableCacheProvider 二、執(zhí)行Query對象的setCacheable方法進(jìn)行緩存查詢,命名查詢,可以把HQL語句寫到xml中,在程序中加以引用(P638) 第一步: 第二步:把上述xml配置到hibernate.cfg.xml中,MyEclipse支持,所有的實(shí)體及配置可以通過MyEclipse反向工程生成,使用注釋(Annotations)配置Hibernate,安裝Hibernate注釋 MyEclipse6.5以上版本帶有注釋包 hibernate-annotations.jar hibernate-commons-annotations.jar ejb3-persistence.jar,Entity注釋,將一個(gè)JavaBean標(biāo)識成實(shí)體Bean,用Entity注釋的Bean必須滿足以下條件: 必須有一個(gè)無參數(shù)的構(gòu)造方法 實(shí)體Bean必須聲明為public 實(shí)體Bean不能被聲明為abstract,Table注釋,指明實(shí)體Bean對應(yīng)的表信息 屬性name:表名稱(默認(rèn)類名) 屬性catalog:數(shù)據(jù)庫名稱 Entity Table(name=“t_user”,catalog=“mydb”) Public class User ,id注釋,配置主鍵,可以是一個(gè)屬性也可以是多個(gè)屬性的組合。 主鍵可以應(yīng)用于屬性頁可以應(yīng)用于get方法,應(yīng)用于屬性時(shí),改屬性的get方法不會(huì)被Hibernate調(diào)用,可以去掉,GeneratedValue注釋,可指定主鍵訪問策略 GeneratedValue(strategy=javax.persistence.GenerationType.IDENTITY) javax.persistence.GenerationType.AUTO:自動(dòng)確定主鍵類型 javax.persistence.GenerationType.IDENTITY:由數(shù)據(jù)庫確定下個(gè)主鍵值 javax.persistence.GenerationType.SEQUENCE:主鍵是SEQUENCE類型字段,使用GenericGenerator注釋產(chǎn)生主鍵值,該類可以使用Hibernate內(nèi)置的各種主鍵生成策略來生成主鍵值 Id org.hibernate.annotations.GenericGenerator(name=“hibernate-uuid”,strategy=“uuid”) Ge
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 素質(zhì)教育背景下四年級道法培優(yōu)補(bǔ)差計(jì)劃
- 機(jī)場保潔人員職業(yè)素養(yǎng)計(jì)劃
- 2025年公務(wù)員考試時(shí)事政治模擬考試題庫B卷及參考答案詳解【滿分必刷】
- 房地產(chǎn)項(xiàng)目現(xiàn)場勘查與可行性研究合同模板
- 知識產(chǎn)權(quán)質(zhì)押典當(dāng)合作合同模板
- 車輛租賃合同終止與車輛租賃服務(wù)風(fēng)險(xiǎn)管理協(xié)議范本
- 餐飲企業(yè)員工薪酬體系設(shè)計(jì)與調(diào)整合同
- 餐飲服務(wù)業(yè)加盟店經(jīng)營策略保密合同
- 體育組瑜伽教學(xué)備課計(jì)劃
- 2025至2030年中國高鈣核桃粉市場分析及競爭策略研究報(bào)告
- 22104銅及銅合金焊接施工工藝標(biāo)準(zhǔn)修改稿
- DB43-T 1991-2021油茶低產(chǎn)林改造技術(shù)規(guī)程
- 醫(yī)療器械包裝微生物屏障性能測試方法探討
- CSC-2000變電站自動(dòng)監(jiān)控系統(tǒng)使用說明書
- 柬埔寨各職能部門
- 項(xiàng)目管理之總師項(xiàng)目管理辦法
- MES七大功能-MES項(xiàng)目解決方案
- TAPPI標(biāo)準(zhǔn)的代碼和內(nèi)容
- 海思芯片HTOL老化測試技術(shù)規(guī)范
- 中國古代文學(xué)史課件
- 大粒徑透水性瀝青混合料柔性基層設(shè)計(jì)與施工指南
評論
0/150
提交評論