




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2008 by Li Weigang. All rights reserved.J2EE架構(gòu)與程序設(shè)計(jì)架構(gòu)與程序設(shè)計(jì)主講:李偉剛西北工業(yè)大學(xué)軟件與微電子學(xué)院2008 by Li Weigang. All rights reserved.第第15章章 O/R映射映射2008 by Li Weigang. All rights reserved.主要內(nèi)容主要內(nèi)容l映射實(shí)體對象l實(shí)體關(guān)聯(lián)l實(shí)體繼承2008 by Li Weigang. All rights reserved.第一節(jié)第一節(jié) 映射實(shí)體對象映射實(shí)體對象2008 by Li Weigang. All rights reserved.1 一個(gè)
2、一個(gè)Customer beanl Bean class是一個(gè)映射到關(guān)系數(shù)據(jù)庫的普通Java對象l有持有狀態(tài)的數(shù)據(jù)成員l通過setter和getter方法訪問數(shù)據(jù)成員的狀態(tài)l必須至少擁有一個(gè)無參數(shù)的構(gòu)造方法成為持久化實(shí)體類lJava persistence只要求兩段元數(shù)據(jù) 注解javax.persistence.Entity: 指明了應(yīng)將該類映射到數(shù)據(jù)庫 注解javax.persistence.Id: 指明了用作主鍵的成員變量l其余元數(shù)據(jù)在默認(rèn)情況下 類中其余成員變量映射到具有相同名稱和類型的數(shù)據(jù)庫字段上 默認(rèn)表名取bean class的非限定類名2008 by Li Weigang. All
3、rights reserved.1 一個(gè)一個(gè)Customer bean使用Id的方式,決定了聲明持久化成員變量的方式l將Id注解置于getter方法之上,則所有其他成員變量的聲明方式需與此一致l將Id注解置于類的成員變量之上,則所有其他成員變量的聲明方式需與此一致用XML映射文件聲明元數(shù)據(jù)l放在META-INF目錄下,或l用persistence.xml文件中的聲明2008 by Li Weigang. All rights reserved.1 一個(gè)一個(gè)Customer bean取值:PROPERTY or FIELD2008 by Li Weigang. All rights reserv
4、ed.2 基本關(guān)系映射基本關(guān)系映射lJava persistence支持的映射機(jī)制從Java對象模型自動映射到數(shù)據(jù)庫schema已有數(shù)據(jù)庫schema,根據(jù)schema自動生成實(shí)體的Java代碼已有數(shù)據(jù)庫schema和Java類,通過注解或XML映射文件建立它們的映射關(guān)系l基本的Schema映射一個(gè)例子2008 by Li Weigang. All rights reserved.2 基本關(guān)系映射基本關(guān)系映射2008 by Li Weigang. All rights reserved.2 基本關(guān)系映射基本關(guān)系映射Tableljavax.persistence.Table定義l用XML映射文件
5、表示2008 by Li Weigang. All rights reserved.2 基本關(guān)系映射基本關(guān)系映射Columnljavax.persistence.Column定義2008 by Li Weigang. All rights reserved.2 基本關(guān)系映射基本關(guān)系映射XML映射文件:orm_1_0.xsd2008 by Li Weigang. All rights reserved.3 主鍵主鍵l3.1 定義主鍵是給定entity bean的一個(gè)標(biāo)識每個(gè)entity bean必須有一個(gè)主鍵,且唯一主鍵可以映射到一個(gè)或多個(gè)數(shù)據(jù)成員必須是如下類型中的一種lJava基本類型(或其封
6、裝類)lJava.lang.Stringl由基本類型和(或)字符串組成的主鍵類2008 by Li Weigang. All rights reserved.3 主鍵主鍵l3.2 Id和GeneratedValuejavax.persistence.Id定義javax.persistence.GeneratedValue定義可以手工生成主鍵,也可以讓persistence provider生成,此時(shí)用GeneratedValue注解2008 by Li Weigang. All rights reserved.3 主鍵主鍵XML映射文件等價(jià)定義2008 by Li Weigang. All r
7、ights reserved.3 主鍵主鍵l 3.3 表生成器將當(dāng)前主鍵的值單獨(dú)保存到一個(gè)數(shù)據(jù)庫表中,每次從指定的表中查詢來獲得主鍵用javax.persistence.TableGenerator注解定義表生成器該注解用于ENTITY類、成員方法或代表主鍵的成員變量一旦在實(shí)體中標(biāo)記,它不僅可以在本實(shí)體中使用,也可以在其他的實(shí)體中引用。它的作用范圍是整個(gè)persist unit配置的實(shí)體類中這種方法生成主鍵的策略可以適用于任何的數(shù)據(jù)庫,不必?fù)?dān)心不同數(shù)據(jù)庫不兼容造成的問題2008 by Li Weigang. All rights reserved.3 主鍵主鍵javax.persistence
8、.TableGenerator定義與GeneratedValue.generator( )屬性取值一致生成器表的定義信息表生成器中的列名,該列用來存放其它表的主鍵鍵名持有主鍵用的計(jì)數(shù)器值的字段用于匹配生成的主鍵,值為主鍵鍵名查詢時(shí),計(jì)數(shù)器指針的遞增數(shù)。用于緩存ID,提高效率2008 by Li Weigang. All rights reserved.3 主鍵主鍵2008 by Li Weigang. All rights reserved.3 主鍵主鍵l3.4 Sequence生成器許多數(shù)據(jù)庫內(nèi)建序列號生成器,可按次序生成IDjavax.persistence.SequenceGenerat
9、or定義使用數(shù)據(jù)庫中的sequence表的名字Sequence初值2008 by Li Weigang. All rights reserved.3 主鍵主鍵2008 by Li Weigang. All rights reserved.3 主鍵主鍵l 3.5 主鍵類和復(fù)合鍵主鍵類滿足l必須是可序列化的l必須具有公有的無參構(gòu)造方法l必須實(shí)現(xiàn)equals()和hashCode()方法不支持自動生成功能3.5.1 javax.persistence.IdClass注解l主鍵類不是在bean class內(nèi)部使用,而是在根據(jù)主鍵查找實(shí)體時(shí),被bean class用來與entity manager交互l
10、是一個(gè)類級別的注解2008 by Li Weigang. All rights reserved.3 主鍵主鍵l一個(gè)主鍵類:CustomerPK.javal使用注解IdClass2008 by Li Weigang. All rights reserved.3 主鍵主鍵3.5.2 javax.persistence.EmbeddedId注解l主鍵類直接嵌入到bean class內(nèi)部使用l將主鍵類的成員屬性映射到表中的字段上的兩種方法 在主鍵類中定義Column映射 直接在bean class上使用AttributeOverrides要映射的內(nèi)嵌類的成員屬性名成員屬性所要映射的字段2008 by
11、 Li Weigang. All rights reserved.3 主鍵主鍵l1 在主鍵類中定義Column映射2008 by Li Weigang. All rights reserved.3 主鍵主鍵l2 直接在bean class上使用AttributeOverrides2008 by Li Weigang. All rights reserved.4 成員屬性映射成員屬性映射l4.1 Transient用于不打算持久化的成員屬性2008 by Li Weigang. All rights reserved.4 成員屬性映射成員屬性映射l4.2 Basic & FetchTyp
12、e用于持久化成員屬性的映射,是成員屬性的默認(rèn)映射方式可處理的類型:基本數(shù)據(jù)類型及其封裝類型ljava.lang.String, byte, Byte, char, Character, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time , java.sql.Timestamp 使用fetch屬性確定“延遲加載”特性l并非有價(jià)值的性能優(yōu)化手段l最佳實(shí)踐:一次性加載basic類型的成員屬性2008 by Li Weigang. Al
13、l rights reserved.4 成員屬性映射成員屬性映射Basic的定義l例子延遲加載特性字段可空?2008 by Li Weigang. All rights reserved.4 成員屬性映射成員屬性映射l4.3 Temporal用于映射java.util.Date或java.util.Calendar類型的成員屬性可以映射成數(shù)據(jù)庫類型:date, time, timestamp定義2008 by Li Weigang. All rights reserved.4 成員屬性映射成員屬性映射l4.4 Lob用于映射java.sql.Clob或java.sql.Blob類型的大對象被標(biāo)
14、注為Lob的成員屬性被持久化到lBlob,如果其Java類型是byte, Byte, 或java.io.SerializablelClob,如果其Java類型是char, Character, 或java.lang.String定義2008 by Li Weigang. All rights reserved.4 成員屬性映射成員屬性映射l4.5 Enumerated用于映射Java枚舉類型的成員屬性定義例子映射成integer類型映射成varchar類型2008 by Li Weigang. All rights reserved.5 多表映射多表映射l 將一個(gè)entity bean映射到多
15、張數(shù)據(jù)庫表l 主表主鍵字段必須能夠和從表的一個(gè)或多個(gè)字段做join操作l 使用SecondaryTable定義定義用于同主表做join操作的字段,缺省值為與主表主鍵名相同當(dāng)前表(從表)的主鍵字段名做join操作的目標(biāo)表的主鍵字段2008 by Li Weigang. All rights reserved.5 多表映射多表映射l例子2008 by Li Weigang. All rights reserved.第二節(jié)第二節(jié) 實(shí)體關(guān)聯(lián)實(shí)體關(guān)聯(lián)2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l1.1 單向One-to-One關(guān)聯(lián)外
16、鍵2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型通過OneToOne注解指明關(guān)聯(lián)類型通過JoinColumn注解來定義映射要關(guān)聯(lián)的實(shí)體類,通常不需設(shè)置,persistence provider會根據(jù)成員屬性的類型自動設(shè)置級聯(lián)方式延遲加載關(guān)聯(lián)的兩端是否可以為空用于關(guān)聯(lián)的外鍵字段若指向被關(guān)聯(lián)表的非主鍵字段,則需定義用于雙向關(guān)聯(lián)2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型例子用于關(guān)聯(lián)的外鍵字段2008 by Li Weigang. All rights res
17、erved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l1.2 雙向One-to-One關(guān)聯(lián)可以使用與單向one-to-one關(guān)聯(lián)相同的數(shù)據(jù)庫Schema來映射雙向one-to-one關(guān)聯(lián)在關(guān)系數(shù)據(jù)庫模型中,關(guān)系沒有方向例子2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型lCustomer bean classlCreditCard bean class用于將該關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫表所需的信息是在Customer中定義的Inverse side反轉(zhuǎn)端Owning side支配端2008 by Li Weigang. All righ
18、ts reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l設(shè)置雙向關(guān)聯(lián)重置關(guān)聯(lián)關(guān)系由于cascade()屬性設(shè)置為ALL,所以Customer被持久化時(shí),與之關(guān)聯(lián)的CreditCard也會相應(yīng)地被自動保存起來需要將支配端的關(guān)聯(lián)屬性設(shè)置為null后,才能重置關(guān)聯(lián)關(guān)系2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l1.3 單向One-to-Many關(guān)聯(lián)數(shù)據(jù)庫schema與實(shí)體關(guān)系的指向是相反的OneToMany注解2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)
19、類型Customer實(shí)體類使用Java泛型指明集合中對象,使得persistence provider知道正在將Customer實(shí)體關(guān)聯(lián)于哪種類型的集合變量。不使用泛型,必須用targetEntity屬性指明PHONE表中的CUSTOMER_ID字段2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型Phone實(shí)體類不包含任何指向Customer的關(guān)系型成員屬性2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型使用關(guān)聯(lián)表2008 by Li Weigang. All
20、 rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型lJoinTable注解定義的外鍵,映射到關(guān)聯(lián)關(guān)系中作為支配端一方的主鍵映射到反轉(zhuǎn)端2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l使用JoinTable注解2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l1.4 單向Many-to-One關(guān)聯(lián)ManyToOne注解2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型Crui
21、se bean classShip bean class不需要定義任何指向Cruise的關(guān)聯(lián)關(guān)系2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l1.5 雙向Many-to-One關(guān)聯(lián)(雙向One-to-Many)實(shí)體的關(guān)聯(lián)關(guān)系與數(shù)據(jù)庫實(shí)現(xiàn)方式無需相同Java persistence規(guī)定many-to-one的集合一端必須是支配端支配端2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型Reservation bean class2008 by Li Weigan
22、g. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型Cruise bean class映射到Reservation bean的cruise成員屬性2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l1.6 單向Many-to-Many關(guān)聯(lián)2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型Reservation bean classCabin bean class沒有回指Reservation的引用2008 by Li Weigang.
23、 All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型l1.7 雙向Many-to-Many關(guān)聯(lián)2008 by Li Weigang. All rights reserved.1 七種實(shí)體關(guān)聯(lián)類型七種實(shí)體關(guān)聯(lián)類型Reservation bean classCabin bean class支配端反轉(zhuǎn)端2008 by Li Weigang. All rights reserved.2 級聯(lián)級聯(lián)l通過entity manager操作entity bean實(shí)例時(shí),同樣的操作會自動地作用于該實(shí)體所擁有的任何關(guān)系型成員屬性上,這種行為稱為“級聯(lián)級聯(lián)”l級聯(lián)的定義2008 by Li
24、 Weigang. All rights reserved.2 級聯(lián)級聯(lián)PERSISTl按照關(guān)聯(lián)關(guān)系的指向,持久化源實(shí)體對象,其相應(yīng)的成員屬性若是另一個(gè)實(shí)體對象,則它也同時(shí)被持久化MERGElMerge是一種將游離對象的狀態(tài)同步到持久化存儲設(shè)備中的過程l使用MERGE級聯(lián),無需為關(guān)聯(lián)實(shí)體調(diào)用EntityManager.merge()方法l如果為關(guān)聯(lián)添加了任何新的實(shí)例,而實(shí)例又沒有在數(shù)據(jù)庫中創(chuàng)建,則調(diào)用merge()方法后,它被自動保存到數(shù)據(jù)庫中2008 by Li Weigang. All rights reserved.2 級聯(lián)級聯(lián)REMOVEl刪除實(shí)體,則自動刪除其級聯(lián)實(shí)體REFRESHl
25、與MERGE相似l區(qū)別:刷新不會將對象實(shí)例中的變更信息更新到數(shù)據(jù)庫,它根據(jù)數(shù)據(jù)庫來刷新對象實(shí)例的狀態(tài)ALLl取所有策略的組合l使用級聯(lián)的策略級聯(lián)僅僅是一種減少EntityManager API調(diào)用的次數(shù)的便捷工具而已如果不確定如何使用實(shí)體,則關(guān)閉級聯(lián)功能2008 by Li Weigang. All rights reserved.第三節(jié)第三節(jié) 實(shí)體繼承實(shí)體繼承2008 by Li Weigang. All rights reserved.1 繼承的映射方式繼承的映射方式l為了將一個(gè)繼承層次映射到數(shù)據(jù)庫,Java persistence提供了三種方法每個(gè)類層次對應(yīng)一張表l一張表中包含了整個(gè)層次
26、結(jié)構(gòu)中每個(gè)類的全部成員屬性每個(gè)具體類對應(yīng)一張表l每個(gè)類有一張專門的表,包含了它的全部成員屬性,以及映射到此表的父類的成員屬性每個(gè)子類對應(yīng)一張表l每個(gè)類有它自己的表,每張表只包含當(dāng)前類中定義的成員屬性,不包含任何父類和子類的成員屬性2008 by Li Weigang. All rights reserved.2 每個(gè)類層次對應(yīng)一張表每個(gè)類層次對應(yīng)一張表l映射關(guān)系用于標(biāo)識該行記錄對應(yīng)哪個(gè)實(shí)體2008 by Li Weigang. All rights reserved.2 每個(gè)類層次對應(yīng)一張表每個(gè)類層次對應(yīng)一張表l javax.persistence.Inheritance注解l javax.p
27、ersistence.DiscriminatorColumn注解Discriminator字段名稱Discriminator字段類型:STRING, CHAR或INTEGER2008 by Li Weigang. All rights reserved.2 每個(gè)類層次對應(yīng)一張表每個(gè)類層次對應(yīng)一張表ljavax.persistence.DiscriminatorValue注解缺省值是entity bean類名2008 by Li Weigang. All rights reserved.2 每個(gè)類層次對應(yīng)一張表每個(gè)類層次對應(yīng)一張表l實(shí)現(xiàn)Person bean class2008 by Li Weigang. All rights reserved.2 每個(gè)類層次對應(yīng)一張表每個(gè)類層次對應(yīng)一張表Customer bean classEmployee bean class2008 by Li Weigang. All rights reserved.2 每個(gè)類層次對應(yīng)一張表每個(gè)類層次對應(yīng)一張表l分析優(yōu)點(diǎn)l容易實(shí)現(xiàn)l性能最佳缺點(diǎn)l所有代表子類成員屬性的字段都必須允許為空l由于代表子類成員屬性的字段有可能沒被用到,所以不遵循數(shù)
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車使用與維護(hù) 課件 1.4.2 汽車巡航功能
- 2025年電冰柜項(xiàng)目可行性研究報(bào)告
- 2025年珠鏈?zhǔn)⒈眄?xiàng)目可行性研究報(bào)告
- 2025年貓仔硬糖項(xiàng)目可行性研究報(bào)告
- 低壓電器 課件 單元一 項(xiàng)目一 認(rèn)識安全用電
- 江蘇省常州市重點(diǎn)達(dá)標(biāo)名校2025年秋初三(下)期末測試卷語文試題含解析
- 南寧學(xué)院《結(jié)構(gòu)可靠度理論及其應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 西藏民族大學(xué)《電子系統(tǒng)信號完整性和熱管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西省大同礦區(qū)六校聯(lián)考2025年初三下學(xué)期期末教學(xué)質(zhì)量檢測試題化學(xué)試題含解析
- 山東省濟(jì)寧市嘉祥一中2025年高三教學(xué)質(zhì)量檢查物理試題含解析
- 材料的性能與規(guī)劃 課件-2024-2025學(xué)年高中技術(shù)蘇教版(2019)必修《技術(shù)與設(shè)計(jì)1》
- 《1.1.1反應(yīng)熱焓變》好題精練
- 多物理場模擬仿真
- 綠化工程售后服務(wù)方案
- 邊緣計(jì)算項(xiàng)目可行性報(bào)告
- 回填灌漿和圍巖固結(jié)灌漿簡介
- 給孩子一生的安全感閱讀記錄
- 2024年電力市場居間服務(wù)合同模板
- 鐵路技規(guī)(全-上傳)
- 《學(xué)術(shù)規(guī)范與論文寫作》課程教學(xué)大綱(本科)
- 大棚包工包料施工合同范本
評論
0/150
提交評論