




已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
J2EE架構(gòu)與程序設(shè)計(jì),第三講Hibernate,Hibernate簡(jiǎn)介,Hibernate是一個(gè)持久化框架,主要用于ORM(Object/Relational Mapping)映射。 問(wèn)題: 什么是持久化框架 為什么要用ORM Hibernate與EJB是什么關(guān)系,開(kāi)發(fā)Hibernate程序基本步驟,配置Hibernate:指定數(shù)據(jù)庫(kù)連接,指定映射文件(默認(rèn)名:hibernate.cfg.xml) 建立映射文件:告訴Hibernate那個(gè)實(shí)體類對(duì)應(yīng)哪個(gè)表,哪個(gè)屬性對(duì)應(yīng)哪個(gè)字段 建立實(shí)體Bean 建立會(huì)話工廠:用對(duì)話工廠獲得Hibernate Session對(duì)象是個(gè)好習(xí)慣,因?yàn)樵诔绦蛑薪?jīng)常需要獲得Session 使用Hibernate操作數(shù)據(jù)庫(kù),hibernate.cfg.xml, org.hibernate.dialect.MySQLDialect jdbc:mysql:/localhost/techsys root root com.mysql.jdbc.Driver ,Role.hbm.xml, 資料:generator詳解,實(shí)例:修改書(shū)籍查詢,對(duì)角色表(Role)的,增刪改查 Chapter17/addrecord.jsp,持久化對(duì)象之間的關(guān)系,不同的session加載同一條數(shù)據(jù)形成的實(shí)體對(duì)象是不同的,反之是相同的。 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”) ),多對(duì)一單向關(guān)聯(lián)關(guān)系,通常,對(duì)于數(shù)據(jù)庫(kù)中的關(guān)聯(lián)關(guān)系在Hibernate中我們通過(guò)組件的方式加以封裝,以此達(dá)到統(tǒng)一存取的目的。,Name:實(shí)體Bean的屬性名 Column:外鍵名 Class:關(guān)聯(lián)類的名稱 Cascade:該屬性指定哪些操作時(shí)級(jí)聯(lián)操作,上例中save-update表示在save或 update時(shí)候進(jìn)行級(jí)聯(lián)操作,基于注釋的多對(duì)一關(guān)系,ManyToOne Cascade(value=(org.hibernate.annotations.CascadeType.SAVE_UPDATE) JoinColumn(name=“customer_id“),其它關(guān)聯(lián)關(guān)系,一對(duì)多(one-to-many) 一對(duì)一(one-to-one),Hibernate查詢,標(biāo)準(zhǔn)查詢API(Criteria) HQL查詢 SQL查詢,HQL,Hql(Hibernate Query Language)是Hibernate框架提供的一種數(shù)據(jù)操作方式,其語(yǔ)法上非常接近SQL,不同的是HQL是面向?qū)ο蟮模褂肏QL可直接返回相應(yīng)的持久化對(duì)象。另外,Hibernate也可以將SQL查詢出來(lái)的數(shù)據(jù)轉(zhuǎn)換為持久化對(duì)象,注意:在HQL中實(shí)體Bean的名稱和屬性是區(qū)分大 小寫(xiě)的,但HQL中的關(guān)鍵字不區(qū)分大小寫(xiě), 如from可以寫(xiě)成From,HQL的使用,String queryString = “from Mykeys as model where = :name”;/創(chuàng)建HQL語(yǔ)句 Query queryObject = getSession().createQuery(queryString);/創(chuàng)建查詢對(duì)象 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對(duì)象列表 from orders 返回orders對(duì)象列表 使用select:返回某個(gè)屬性的值列表 select number from orders 則返回的orders中為String類型的列表,針對(duì)同名實(shí)體的查詢,在查詢時(shí)可以使用包指定查詢的類 select chapter17.entity.mymessage m,HQL分頁(yè),利用Query的setFirstResult和setMaxResults方法進(jìn)行分頁(yè) 例: Session session=HibernateSessionFactory.getSession(); Query q=session.createQuery(“from Orders“); q.setFirstResult(1);/從第2條記錄開(kāi)始 q.setMaxResults(2);/每頁(yè)取2條 List list=q.list();,查詢緩存,若使用Hibernate緩存查詢則Hibernate在執(zhí)行時(shí)會(huì)先在緩存中找尋先前執(zhí)行過(guò)的的同樣的HQL的查詢結(jié)果,若找到則直接從緩存中取數(shù)據(jù),從而達(dá)到快速查詢的目的,使用緩存,一、在配置文件中打開(kāi)緩存并指定緩存類 true org.hibernate.cache.HashtableCacheProvider 二、執(zhí)行Query對(duì)象的setCacheable方法進(jìn)行緩存查詢,命名查詢,可以把HQL語(yǔ)句寫(xiě)到xml中,在程序中加以引用(P638) 第一步: 第二步:把上述xml配置到hibernate.cfg.xml中,MyEclipse支持,所有的實(shí)體及配置可以通過(guò)MyEclipse反向工程生成,使用注釋(Annotations)配置Hibernate,安裝Hibernate注釋 MyEclipse6.5以上版本帶有注釋包 hibernate-annotations.jar hibernate-commons-annotations.jar ejb3-persistence.jar,Entity注釋,將一個(gè)JavaBean標(biāo)識(shí)成實(shí)體Bean,用Entity注釋的Bean必須滿足以下條件: 必須有一個(gè)無(wú)參數(shù)的構(gòu)造方法 實(shí)體Bean必須聲明為public 實(shí)體Bean不能被聲明為abstract,Table注釋,指明實(shí)體Bean對(duì)應(yīng)的表信息 屬性name:表名稱(默認(rèn)類名) 屬性catalog:數(shù)據(jù)庫(kù)名稱 Entity Table(name=“t_user”,catalog=“mydb”) Public class User ,id注釋,配置主鍵,可以是一個(gè)屬性也可以是多個(gè)屬性的組合。 主鍵可以應(yīng)用于屬性頁(yè)可以應(yīng)用于get方法,應(yīng)用于屬性時(shí),改屬性的get方法不會(huì)被Hibernate調(diào)用,可以去掉,GeneratedValue注釋,可指定主鍵訪問(wèn)策略 GeneratedValue(strategy=javax.persistence.GenerationType.IDENTITY) javax.persistence.GenerationType.AUTO:自動(dòng)確定主鍵類型 javax.persistence.GenerationType.IDENTITY:由數(shù)據(jù)庫(kù)確定下個(gè)主鍵值 javax.persistence.GenerationType.SEQUENCE:主鍵是SEQUENCE類型字段,使用GenericGenerator注釋產(chǎn)生主鍵值,該類可以使用Hibernate內(nèi)置的各種主鍵生成策略來(lái)生成主鍵值 Id org.hibernate.annotations.GenericGenerator(name=“hibernate-uuid”,strategy=“uuid”) Ge
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 實(shí)驗(yàn)室裝修施工方案與技術(shù)措施
- 消防通風(fēng)工程安裝合同
- 商城房屋維修施工方案計(jì)劃
- 人教版八年級(jí)語(yǔ)文下冊(cè)考核方案計(jì)劃
- 2025年電子商務(wù)師(高級(jí))職業(yè)技能鑒定試卷:電子商務(wù)數(shù)據(jù)分析競(jìng)賽賽后總結(jié)報(bào)告評(píng)審標(biāo)準(zhǔn)試題
- 2025年征信考試題庫(kù):征信數(shù)據(jù)分析與報(bào)告撰寫(xiě)深度解析試題
- 2025年中國(guó)燃?xì)夤芫W(wǎng)檢測(cè)車行業(yè)市場(chǎng)調(diào)查研究及發(fā)展戰(zhàn)略研究報(bào)告
- 2025年中國(guó)環(huán)氨樹(shù)脂涂料行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 中國(guó)汽車?yán)刃袠I(yè)發(fā)展?jié)摿︻A(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2025年中國(guó)燕窩行業(yè)競(jìng)爭(zhēng)格局及市場(chǎng)發(fā)展?jié)摿︻A(yù)測(cè)報(bào)告
- 成人女性壓力性尿失禁護(hù)理干預(yù)護(hù)理團(tuán)標(biāo)解讀
- 廣州外語(yǔ)學(xué)校小升初數(shù)學(xué)試題
- 2024內(nèi)蒙古煤炭地質(zhì)勘查(集團(tuán))一一七有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 信訪工作法治化培訓(xùn)講座
- 露天礦山新進(jìn)員工安全培訓(xùn)
- 主播助理合同范本
- 2025年遼寧沈陽(yáng)地鐵集團(tuán)有限公司所屬分公司招聘筆試參考題庫(kù)附帶答案詳解
- 車間主任轉(zhuǎn)正述職報(bào)告
- 靜脈采血并發(fā)癥預(yù)防與處理
- 2024年體育類第一批(本科)投檔最低分排名
- 2025年河南省許昌市許昌縣小升初數(shù)學(xué)綜合練習(xí)卷含解析
評(píng)論
0/150
提交評(píng)論