23-普通用戶注冊(cè)hibernate映射_第1頁(yè)
23-普通用戶注冊(cè)hibernate映射_第2頁(yè)
23-普通用戶注冊(cè)hibernate映射_第3頁(yè)
23-普通用戶注冊(cè)hibernate映射_第4頁(yè)
23-普通用戶注冊(cè)hibernate映射_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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)介

1、S2SH輕量級(jí)框架技術(shù) -S2SH應(yīng)用基礎(chǔ),Hibernate映射類型,Hibernate映射類型 是Java和SQL類型的橋梁,用于生成適合的DML或DDL語(yǔ)句 兩種映射類型 內(nèi)置映射類型 自定義映射類型(略),基礎(chǔ)類型的映射關(guān)系,日期類型的映射關(guān)系,大對(duì)象類型的映射關(guān)系,使用Hibernate映射類型,沒(méi)有指定Hibernate映射類型時(shí),Hibernate使用反射機(jī)制判別Java屬性的類別,然后采用相應(yīng)的Hibernate類型 我們建議顯示指定映射類型,特別是對(duì)于int、long等基本數(shù)據(jù)類型,建議使用對(duì)應(yīng)的包裝類。這樣生成的POJO類的屬性默認(rèn)值為null,避免基本數(shù)據(jù)類型的0等默認(rèn)值

2、。 以下情況必須顯式指定Hibernate的映射類型 希望通過(guò)Hibernate工具,由映射文件生成Java持久化類或數(shù)據(jù)庫(kù)Schema時(shí) 一個(gè)Java類型對(duì)應(yīng)多個(gè)Hibernate映射類型,數(shù)據(jù)庫(kù)表的主鍵,數(shù)據(jù)庫(kù)表的主鍵 代理主鍵(不具備業(yè)務(wù)含義的字段)與自然主鍵 主鍵的值最好不會(huì)改變 數(shù)據(jù)庫(kù)中一般使用代理主鍵 主鍵的生成方式 程序生成 數(shù)據(jù)庫(kù)系統(tǒng)生成 自動(dòng)增長(zhǎng):MySQL、MS SQL Server 序列:Oracle,Hibernate的標(biāo)識(shí)符生成器,持久化標(biāo)識(shí)符用于唯一地標(biāo)識(shí)一個(gè)持久化對(duì)象,數(shù)據(jù)庫(kù)主鍵唯一地標(biāo)識(shí)表中的一條記錄;兩者的對(duì)應(yīng)關(guān)系是O-R映射基礎(chǔ) Hibernate使用標(biāo)識(shí)符

3、生成器支持不同的主鍵生成方式,Hibernate內(nèi)置的標(biāo)識(shí)符生成器,assigned 讓應(yīng)用程序在save()之前為對(duì)象分配一個(gè)標(biāo)識(shí)符。這是 元素沒(méi)有指定時(shí)的默認(rèn)生成策略。 increment 用于為long, short或者int類型生成 唯一標(biāo)識(shí)。只有在沒(méi)有其他進(jìn)程往同一張表中插入數(shù)據(jù)時(shí)才能使用。 在集群下不要使用。 identity native 對(duì)DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的內(nèi)置標(biāo)識(shí)字段提供支持。 返回的標(biāo)識(shí)符是long, short 或者int類型的。 sequence 在DB2,PostgreSQL, Oracle,

4、 SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的標(biāo)識(shí)符是long, short或者 int類型的。,配置標(biāo)識(shí)符生成器的示例,identity示例 sequence示例, , person_id_sequence ,為什么需要組件映射,域模型與關(guān)系數(shù)據(jù)模型比較 建立域模型的原則是提高代碼的可重用性 建立關(guān)系數(shù)據(jù)模型的原則是在不會(huì)導(dǎo)致數(shù)據(jù)冗余的前提下,盡可能的減少數(shù)據(jù)庫(kù)表的數(shù)目及表之間的外鍵參照關(guān)系 問(wèn)題 持久化類的數(shù)目往往比數(shù)據(jù)庫(kù)表的數(shù)目多,而且持久化類的屬性并不與表的字段一一對(duì)應(yīng),組件映射的實(shí)現(xiàn),配置映射文件, ,實(shí)

5、體類型與值類型,實(shí)體(Entity)類型 由class、subclass元素聲明 有獨(dú)立的標(biāo)識(shí)符(OID),可以被單獨(dú)持久化 值(Value)類型 沒(méi)有OID 不能進(jìn)行save、get、delete等操作,生命周期依賴于所屬的持久化類的對(duì)象的生命周期,集合映射,集合映射(值類型集合) Set 集合內(nèi)的對(duì)象不排序,沒(méi)有重復(fù)對(duì)象 List 集合內(nèi)的對(duì)象按照索引位置排序,可以有重復(fù)對(duì)象 Map 集合內(nèi)的每一個(gè)元素包含一對(duì)鍵對(duì)象和值對(duì)象,集合中沒(méi)有重復(fù)的鍵對(duì)象,可以有重復(fù)的值對(duì)象。,映射關(guān)系描述,O-R關(guān)系,映射Set的實(shí)現(xiàn),配置映射文件,參見(jiàn)例子工程:hibernate_03_05_set, ,映射

6、List的實(shí)現(xiàn),配置映射文件, ,映射Map的實(shí)現(xiàn),配置映射文件, ,慣例優(yōu)先(于配置),Convention over Configuration 對(duì)于很多項(xiàng)目來(lái)說(shuō),遵從已有慣例,提供合理的缺省選項(xiàng),可以顯著地減少系統(tǒng)所需配置項(xiàng)目的數(shù)量 配置示例 ,注解映射的基礎(chǔ),Entity,注冊(cè)在類頭上,將一個(gè)類聲明為一個(gè)實(shí)體bean(即一個(gè)持久化POJO類) 。 Table,注冊(cè)在類頭上,注解聲明了該實(shí)體bean映射指定的表(table)。 Id用來(lái)注冊(cè)主屬性,GeneratedValue用來(lái)注冊(cè)主屬性的生成策略,Column用來(lái)注冊(cè)屬性,Version用來(lái)注冊(cè)樂(lè)觀鎖,Transient用來(lái)注冊(cè)不是屬

7、性。,注解映射的基礎(chǔ),以上的Id、GeneratedValue、 Column 、 Version,可以用來(lái)注冊(cè)屬性,既可以寫在Java類的屬性上,也可以注冊(cè)在屬性對(duì)應(yīng)的getter上。 Transient注冊(cè)在多余的屬性或多余的getter上,但是必須與以上的Column等對(duì)應(yīng)。 Column 標(biāo)識(shí)屬性對(duì)應(yīng)的字段,示例:Column(name=“userName),注解映射的基礎(chǔ),(1) name 可選,列名(默認(rèn)值是屬性名) (2) unique 可選,是否在該列上設(shè)置唯一約束(默認(rèn)值false) (3) nullable 可選,是否設(shè)置該列的值可以為空(默認(rèn)值false) (4) ins

8、ertable 可選,該列是否作為生成的insert語(yǔ)句中的一個(gè)列(默認(rèn)值true) (5) updatable 可選,該列是否作為生成的update語(yǔ)句中的一個(gè)列(默認(rèn)值true) (6) columnDefinition 可選: 為這個(gè)特定列覆蓋SQL DDL片段 (這可能導(dǎo)致無(wú)法在不同數(shù)據(jù)庫(kù)間移植) (7) table 可選,定義對(duì)應(yīng)的表(默認(rèn)為主表) (8) length 可選,列長(zhǎng)度(默認(rèn)值255) (8) precision 可選,列十進(jìn)制精度(decimal precision)(默認(rèn)值0) (10) scale 可選,如果列十進(jìn)制數(shù)值范圍(decimal scale)可用,在此

9、設(shè)置(默認(rèn)值0),注解映射的基礎(chǔ),主鍵生成策略的注解例子,注解映射的基礎(chǔ),Transient 標(biāo)識(shí)這個(gè)屬性不用持久化 Embeddable【小對(duì)象的頭上】 標(biāo)識(shí)實(shí)體中可以定義一個(gè)嵌入式組件(embedded component)。組件類必須在類一級(jí)定義Embeddable注解。 Embedded【大對(duì)象的屬性頭上】 引用定義的小對(duì)象。 Embeddable【小對(duì)象的頭上】 標(biāo)識(shí)實(shí)體中可以定義一個(gè)嵌入式組件(embedded component)。組件類必須在類一級(jí)定義Embeddable注解。 注意:如果這個(gè)小對(duì)象作為復(fù)合主鍵,一定要實(shí)現(xiàn)Serializable接口。這并不是注解決定的,而是H

10、ibernate的主鍵都需要實(shí)現(xiàn)Serializable接口。 EmbeddedId 【大對(duì)象的屬性頭上】 引用定義的小對(duì)象作為主鍵。 注意:不需要再使用Id注解。,注解映射,主1【tbl_product】: OneToOne(cascade=CascadeType.ALL) PrimaryKeyJoinColumn privateProductInfoModelinfo; 從1【tbl_product_info】: Id Column GeneratedValue(generator=“copy【引用生成策略】) GenericGenerator(name=“copy【定義生成策略】”,strategy=“foreign【寫死,使用外來(lái)策略】”,parameters=Parameter(name=“property”,value=“product【引用自己的Java屬性】) privateintuuid; OneToOne(mappedBy=“info【引用對(duì)方的Java屬性】) privateProductModelproduct;,注解映射,1【tbl_parent】: OneToMany JoinColumn(nam

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論