hibernate4-關(guān)系映射事務(wù)原理性能和二級緩存最佳實踐_第1頁
hibernate4-關(guān)系映射事務(wù)原理性能和二級緩存最佳實踐_第2頁
hibernate4-關(guān)系映射事務(wù)原理性能和二級緩存最佳實踐_第3頁
hibernate4-關(guān)系映射事務(wù)原理性能和二級緩存最佳實踐_第4頁
hibernate4-關(guān)系映射事務(wù)原理性能和二級緩存最佳實踐_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Java私塾深入淺出學(xué)Hibernate4系列精品教程編輯課件n 在線 ?frombook 教學(xué)視頻n 精品視頻課程:Java基礎(chǔ)、Java中級、Java高級、Java項目、Java Web開發(fā)、Java Web項目(中移動科技綜合管理)、數(shù)據(jù)庫SQL、PL/SQL、Jquery、研磨Struts2、Hibernate4實戰(zhàn)、Spring3開發(fā)實戰(zhàn)、log4j&slf4j實戰(zhàn)、ant實戰(zhàn)、maven實戰(zhàn) 等n 正在制作中的精品課程介紹:Android開發(fā)和項目實戰(zhàn)、Ext開發(fā)到實戰(zhàn)、數(shù)據(jù)庫設(shè)計和性能優(yōu)化、WebLogic從入門到精通、JBPM4的開發(fā)、Spring MVC開發(fā)、Spring S

2、ecurity開發(fā)、SSH+JBPM綜合項目、保險業(yè)核心業(yè)務(wù)系統(tǒng)開發(fā)、金融業(yè)核心業(yè)務(wù)系統(tǒng)開發(fā)。更多更多編輯課件本節(jié)課程概覽n Hibernate的關(guān)系映射包括:關(guān)系的表示、集合映射、關(guān)系映射、雙向一對多映射示例、過濾器編輯課件第四部分:關(guān)系映射編輯課件n 一對多數(shù)據(jù)表(部門表和 部門下的人員表)n 多對多數(shù)據(jù)表(部門表和 人員表)depName開發(fā)部uuidDep1depUuidDep1Name張三Uuid1depName開發(fā)部UuidDep1depUuidDep1Dep1userName張三李四UuidUser1User2銷售部Dep2depName開發(fā)部UuidDep1李四User2use

3、rName張三uuidUser1User2User1Dep1Dep223UserUuidUser1Uuid DepUuid1 Dep11*1*關(guān)系的數(shù)據(jù)庫表示n 數(shù)據(jù)表之間的關(guān)系分為三類:一對一、一對多、多對多n 一對一數(shù)據(jù)表(部門表 和 部門主管表)編輯課件private B b = null;public class B private A a = null;n 對象一對多 (雙向)public class A private B b = null;public class B private Collection colA = null;n 對象多對多 (雙向)public class

4、A private Collection colB = null;public class B private Collection colA = null;n 雙向一對多是最常用的映射關(guān)系關(guān)系的對象表示n 根據(jù)相互尋找的關(guān)系又分:單向和雙向n 對象一對一 (雙向)public class A 編輯課件key的配置n 元素 元素在父映射元素定義了對新表的連接,并且在被連接表中定義了一個外鍵引用原表的主鍵的情況下經(jīng)常使用。(1)column(可選):外鍵字段的名稱。也可以通過嵌套的 指定。(2)on-delete(可選,默認是 noaction):表明外鍵關(guān)聯(lián)是否打開數(shù)據(jù)庫級別的級聯(lián)刪除。(3)

5、property-ref(可選):表明外鍵引用的字段不是原表的主鍵(提供給遺留數(shù)據(jù))。(4)not-null(可選):表明外鍵的字段不可為空,意味著無論何時外鍵都是主鍵的一部分。(5)update(可選):表明外鍵決不應(yīng)該被更新,這意味著無論何時外鍵都是主鍵的一部分。(6)unique(可選):表明外鍵應(yīng)有唯一性約束,這意味著無論何時外鍵都是主鍵的一部分。對那些看重刪除性能的系統(tǒng),推薦所有的鍵都應(yīng)該定義為 on-delete=cascade,這樣Hibernate 將使用數(shù)據(jù)庫級的 ON CASCADE DELETE 約束,而不是多個 DELETE 語句編輯課件集合映射的配置-1n 用于映射集

6、合類的Hibernate映射元素取決于接口的類型。比如,元素用來映射Set類型的屬性:n 除了,還有, , , 和 映射元素。具有代表性 ,如下:編輯課件n 集合映射的配置-2編輯課件(1)(2)(3)(4)(5)(6)(7)(8)name 集合屬性的名稱table (可選默認為屬性的名稱)這個集合表的名稱(不能在一對多的關(guān)聯(lián)關(guān)系中使用)schema (可選) 表的schema的名稱, 他將覆蓋在根元素中定義的schemalazy (可選-默認為true) 可以用來關(guān)閉延遲加載(false),inverse (可選默認為false) 標(biāo)記這個集合作為雙向關(guān)聯(lián)關(guān)系中的方向一端。cascade (

7、可選默認為none) 讓操作級聯(lián)到子實體sort(可選)指定集合的排序順序order-by (可選, 僅用于jdk1.4) 指定表的字段(一個或幾個)再加上asc或者desc(可選), 定義Map,Set和Bag的迭代順序(9) where (可選) 指定任意的SQL where條件, 該條件將在重新載入或者刪除這個集合時使用(當(dāng)集合中的數(shù)據(jù)僅僅是所有可用數(shù)據(jù)的一個子集時這個條件非常有用)(10) fetch (可選, 默認為select) 用于在外連接抓取、通過后續(xù)select抓取和通過后續(xù)subselect抓取之間選擇。(11) batch-size (可選, 默認為1) 指定通過延遲加載

8、取得集合實例的批處理塊大小(12) access(可選-默認為屬性property):Hibernate取得集合屬性值時使用的策略(13) 樂觀鎖 (可選 - 默認為 true): 對集合的狀態(tài)的改變會是否導(dǎo)致其所屬的實體的版本增長。 (對一對多關(guān)聯(lián)來說,關(guān)閉這個屬性常常是有理的)(14) mutable(可變) (可選 - 默認為true): 若值為false,表明集合中的元素不會改變(在某些情況下可以進行一些小的性能優(yōu)化)。集合映射的配置-3編輯課件集合映射的配置-4n 集合外鍵集合實例在數(shù)據(jù)庫中依靠持有集合的實體的外鍵加以辨別。此外鍵作為集合關(guān)鍵字段加以引用。集合關(guān)鍵字段通過 元素映射。

9、在外鍵字段上可能具有非空約束。對于大多數(shù)集合來說,這是隱含的。對單向一對多關(guān)聯(lián)來說,外鍵字段默認是可以為空的,因此你可能需要指明 not-null=“true”。示例如下:外鍵約束可以使用 ON DELETE CASCADE,示例如下:編輯課件關(guān)系映射-1n one-to-one通過 one-to-one 元素,可以定義持久化類的一對一關(guān)聯(lián)。編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射-2(1)name:屬性名。(2)class(可選 默

10、認是通過反射得到的屬性類型):被關(guān)聯(lián)的類的名字。(3)cascade(級聯(lián))(可選)表明操作是否從父對象級聯(lián)到被關(guān)聯(lián)的對象。(4)constrained(約束)(可選)表明該類對應(yīng)的表對應(yīng)的數(shù)據(jù)庫表,和被關(guān)聯(lián)的對象所對應(yīng)的數(shù)據(jù)庫表之間,通過一個外鍵引用對主鍵進行約束。這個選項影響 save() 和 delete()在級聯(lián)執(zhí)行時的先后順序以及決定該關(guān)聯(lián)能否被委托(也在 schema export tool 中被使用)。(5)fetch(可選 默認為 select):在外連接抓?。╫uter-join fetching)和序列選擇抓?。╯equential select fetching)兩者中選

11、擇其一。(6)property-ref:(可選)指定關(guān)聯(lián)類的屬性名,這個屬性將會和本類的主鍵相對應(yīng)。如果沒有指定,會使用對方關(guān)聯(lián)類的主鍵。(7)access(可選 默認為 property):Hibernate 用來訪問屬性值的策略。(8)formula (可選):絕大多數(shù)一對一的關(guān)聯(lián)都指向其實體的主鍵。在一些少見的情況中,你可能會指向其他的一個或多個字段,或者是一個表達式,這些情況下,你可以用一個SQL 公式來表示。(可以在 org.hibernate.test.onetooneformula 找到例子)(9)lazy(可選 默認為 proxy):默認情況下,單點關(guān)聯(lián)是經(jīng)過代理的。lazy=

12、no-proxy指定此屬性應(yīng)該在實例變量第一次被訪問時應(yīng)該延遲抓取(fetche lazily)(需要運行時字節(jié)碼的增強)。 lazy=false指定此關(guān)聯(lián)總是被預(yù)先抓取。注意,如果constrained=false, 不可能使用代理,Hibernate會采取預(yù)先抓取。(10)entity-name(可選):被關(guān)聯(lián)的類的實體名。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900name=propertyNamecolumn=column_nameclass=ClassNamecascade

13、=cascade_style(4)fetch=join|selectupdate=true|falseinsert=true|false(1)(2)(3)(5)(6)(7)property-ref=propertyNameFromAssociatedClass(8)access=field|property|ClassName(9)(10)unique=true|falsenot-null=true|false(11)optimistic-lock=true|false“l(fā)azy=proxy|no-proxy|falsenot-found=ignore|exception“(12)(13)(1

14、4)entity-name=EntityName(15)formula=arbitrary SQL expression(16)/Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射-3n many-to-one通過 many-to-one 元素,可以定義一種常見的與另一個持久化類的多對一關(guān)聯(lián),這個表的一個外鍵引用目標(biāo)表的主鍵字段。many-to-one私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java

15、私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射-4(1)name:屬性名。(2)column(可選):外鍵字段的名稱。也可以通過嵌套的 指定。(3)class(可選 默認是通過反射得到的屬性類型):被關(guān)聯(lián)的類的名字。(4)cascade(級聯(lián))(可選)表明操作是否從父對象級聯(lián)到被關(guān)聯(lián)的對象。(5)fetch(可選 默認為 select):在外連接抓取和序列選擇抓取兩者中選擇其一。(6)update, insert(可選 默認為 true)指定對應(yīng)的字段是否包含在用于 UPDATE 和/或 INSERT的 SQL語句中

16、。如果二者都是false,則這是一個純粹的 “外源性(derived)”關(guān)聯(lián),它的值是通過映射到同一個(或多個)字段的某些其他屬性得到 或者通過 trigger(觸發(fā)器)、或其他程序生成。(7)property-ref:(可選)被關(guān)聯(lián)到此外鍵的類中的對應(yīng)屬性的名字。如果不指定,使用被關(guān)聯(lián)類的主鍵(8)access(可選 默認為 property):Hibernate 用來訪問屬性值的策略。(9)unique(可選):使用 DDL 為外鍵字段生成一個唯一約束。此外, 這也可以用作 propertyref的目標(biāo)屬性。這使關(guān)聯(lián)同時具有一對一的效果。(10)not-null(可選):使用 DDL 為外

17、鍵字段生成一個非空約束。(11)optimistic-lock(可選 默認為 true):指定這個屬性在做更新時是否需要獲得樂觀鎖定。換句話說,它決定這個屬性發(fā)生臟數(shù)據(jù)時版本(version)的值是否增長。(12)lazy(可選 默認為 proxy):默認情況下,單點關(guān)聯(lián)是經(jīng)過代理的。lazy=no-proxy 指定此屬性應(yīng)該在實例變量第一次被訪問時應(yīng)該延遲抓?。╢etche lazily)(需要運行時字節(jié)碼的增強)。lazy=false 指定此關(guān)聯(lián)總是被預(yù)先抓取。(13)not-found(可選 - 默認為exception):指定如何處理引用缺失行的外鍵:ignore 會把缺失的行作為一個

18、空關(guān)聯(lián)處理。(14)entity-name(可選):被關(guān)聯(lián)的類的實體名。(15)formula(可選):SQL 表達式,用于定義 computed(計算出的)外鍵值。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射-5n one-to-many通過 one-to-many 元素,可以定義一種常見的與另一個持久化類的一對多關(guān)聯(lián)。(1)class(必需):被關(guān)聯(lián)

19、類的名稱。(2)not-found(可選 - 默認為exception):指明若緩存的標(biāo)示值關(guān)聯(lián)的行缺失,該如何處理:ignore 會把缺失的行作為一個空關(guān)聯(lián)處理。(3)entity-name(可選):被關(guān)聯(lián)的類的實體名,作為 class 的替代。注意: 元素不需要定義任何字段。也不需要指定表名。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射的示例-1還是

20、用示例來看,下面作一個雙向一對多的關(guān)系示例:1:新建一個Parent對象和Child對象,Parent對象里面有一個Child對象的集合,Child對象里面有一個對Parent對象的引用,如下:public class Parentprivate String id;private String name;private Set children = new HashSet();public class Child private String uuid;private String address;private String postCode;private Parent parent;私

21、塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射的示例-2Parent.hbm.xml: 私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列

22、精品教程關(guān)系映射的示例-3Child.hbm.xml: 私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射的示例-4客戶端測試TestMR.java文件太長,直接看演示好了。在這個測試里面分別演示了單獨的操作和級聯(lián)的操作。n inverse:指定由哪一方來維護雙方的關(guān)聯(lián)關(guān)系,默認是false,也就是雙方都維護,主要用在一對多 和 多對多中。n 在一對多中使用i

23、nverse的時候,通常是在”一”這一端設(shè)置inverse=true,他的意思就是由多的那一端去維護關(guān)系,非反向端用于把內(nèi)存中的表示保存到數(shù)據(jù)庫中。如下:Parent p = new Parent();Child c = new Child();c.setParent(p); /維護父子之間關(guān)系p.getChildren().add(c);n inverse還有一個重要特點就是會優(yōu)化Sqln cascade:定義對象的級聯(lián)關(guān)系all : 所有情況下均進行關(guān)聯(lián)操作none:所有情況下均不進行關(guān)聯(lián)操作。這是默認值save-update:在執(zhí)行save/update/saveOrUpdate時進行關(guān)

24、聯(lián)操作delete:在執(zhí)行delete時進行關(guān)聯(lián)操作私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程關(guān)系映射的示例-5n 簡單的示范一下雙向的一對一雙向一對一的操作是類似于雙向一對多的,只是配置上有一些不同:1:Parent里面的配置,示例如下:這里的property-ref參照的是Child對象里面的屬性。2:Child里面的配置,不是使用one-to-one,而

25、是仍使用many-to-one,示例如下:3:測試程序里面,原來調(diào)用集合的地方,變成調(diào)用一個Child對象,其他就差不多了,可以測試看看。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程過濾器-1n Hibernate4的過濾器Hibernate3 新增了對某個類或者集合使用預(yù)先定義的過濾器條件(filtercriteria)的功能。過濾器條件相當(dāng)于定義一個 非常類

26、似于類和各種集合上的“where”屬性的約束子句,但是過濾器條件可以帶參數(shù),應(yīng)用程序可以在運行時決定是否啟用給定的過濾器,以及使用什么樣的參數(shù)值。過濾器的用法很像數(shù)據(jù)庫視圖,只不過是在應(yīng)用程序中確定使用什么樣的參數(shù)的。n 定義過濾器要使用過濾器,首先要在相應(yīng)的映射節(jié)點中定義。而定義一個過濾器,要用到位于 節(jié)點之內(nèi)的 節(jié)點:示例如下:私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開

27、發(fā)系列精品教程過濾器-2n 使用過濾器之配置定義好之后,就可以在某個類中使用這個過濾器:.或者也可以在某個集合使用它:在同時可以使用多個過濾器。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程過濾器-3n 使用過濾器之程序在程序中,需要使用session接口中的:enableFilter(String filterName),getEnabledFilter(Str

28、ing filterName),和 disableFilter(String filterName)方法。Session中默認不啟用過濾器,必須通過enabledFilter() 方法顯式的啟用。示例代碼session.enableFilter(myFilter).setParameter(myFilterParam,some-value);n 過濾器示例在Parent.hbm.xml中定義有如下的過濾器:私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)

29、培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程過濾器-4n 在定義Child集合中使用= :myFilterParam anduuid n 程序中使用示例s.enableFilter(myFilter).setParameter(myFilterParam, %1%);s.enableFilter(myFilter2).setParameter(myFilterParam, 1).setParameter(myFilterParam2, 3);Query q = s.createQuery(select p from Parent as p );Sy

30、stem.out.println(p=+p.getChildren();私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900nnnnn理解關(guān)系的表示熟悉集合映射,掌握set了解關(guān)系映射的知識掌握雙向一對多映射的開發(fā)掌握過濾器的定義、配置和開發(fā)應(yīng)用n 作業(yè):復(fù)習(xí)和練習(xí)這些知識,尤其是雙向一對多映射的開發(fā),還有過濾器的使用。Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程本節(jié)課程小結(jié)私塾在線?frombook 獨家提供配

31、套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程本節(jié)課程概覽n Hibernate的事務(wù)和并發(fā)私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程第六部分:Hibernate的事

32、務(wù)和并發(fā)私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程概述n Hibernate本身沒有事務(wù)的實現(xiàn)Hibernate 直接使用 JDBC 連接和 JTA 資源,不添加任何附加鎖定行為。也就是說你在Hibernate里面使用的事務(wù)要么是JDBC的事務(wù),要么是JTA的事務(wù)。n Hibernate不鎖定內(nèi)存中的對象你的應(yīng)用程序會按照你的數(shù)據(jù)庫事務(wù)的隔離級別規(guī)定的那樣運作

33、,真正對事務(wù)的實現(xiàn)和支持也依賴于數(shù)據(jù)庫。n 對于并發(fā)處理,Hibernate提供了樂觀鎖和悲觀鎖來進行并發(fā)處理Hibernate對自動樂觀并發(fā)控制提供版本管理,針對行級悲觀鎖定,Hibernate也提供了輔助的(較小的)API,它使用了 SELECT FOR UPDATE 的 SQL 語法私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程Session和事務(wù)范圍-1n

34、 Hibernate的Session是和事務(wù)聯(lián)系在一起的可以通過Session去獲取事務(wù)的接口,從而進行事務(wù)的控制。n 數(shù)據(jù)庫事務(wù)應(yīng)該盡可能的短這樣能降低數(shù)據(jù)庫中的鎖爭用。數(shù)據(jù)庫長事務(wù)會阻止你的應(yīng)用程序擴展到高的并發(fā)負載。因此,假若在用戶思考期間讓數(shù)據(jù)庫事務(wù)開著,直到整個工作單元完成才關(guān)閉這個事務(wù),這絕不是一個好的設(shè)計。這就引出一個問題:一個操作單元,也就是一個事務(wù)單元的范圍應(yīng)該是多大?一個操作一個?一個請求一個?一個應(yīng)用一個?n 反模式:session-per-operation在單個線程中, 不要因為一次簡單的數(shù)據(jù)庫調(diào)用,就打開和關(guān)閉一次Session!數(shù)據(jù)庫事務(wù)也是如此。也就是說應(yīng)該禁止

35、自動事務(wù)提交(auto-commit)。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程Session和事務(wù)范圍-2n session-per-request最常用的模式是 每個請求一個會話。 在這種模式下,來自客戶端的請求被發(fā)送到服務(wù)器端,即 Hibernate 持久化層運行的地方,一個新的 HibernateSession 被打開,并且執(zhí)行這個操作單元中所有的數(shù)

36、據(jù)庫操作。一旦操作完成(同時對客戶端的響應(yīng)也準(zhǔn)備就緒),session 被同步,然后關(guān)閉。會話和請求之間的關(guān)系是一對一的關(guān)系。Hibernate 內(nèi)置了對“當(dāng)前 session(current session)” 的管理,用于簡化此模式。你要做的一切就是在服務(wù)器端要處理請求的時候,開啟事務(wù),在響應(yīng)發(fā)送給客戶之前結(jié)束事務(wù),通常使用Servelt Filter來完成。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!

37、深入淺出學(xué)Hibernate4開發(fā)系列精品教程數(shù)據(jù)庫事務(wù)聲明n 非托管環(huán)境下所謂非托管,指的是:應(yīng)用程序沒有托管到J2EE環(huán)境中,通常由Hibernate自己來負責(zé)管理數(shù)據(jù)庫連接池。應(yīng)用程序開發(fā)人員必須手工設(shè)置事務(wù)聲明,換句話說,就是手工啟動,提交,或者回滾數(shù)據(jù)庫事務(wù)。n 使用JTA又有兩種方式,一種是在Hibernate配置里面修改transaction的factory類,從而在程序里面可以直接使用Hibernate的事務(wù)API,也就是程序不用變化。另外一種方式就是直接通過JNDI去查找UserTransaction,然后直接在程序里面使用JTA的接口來控制事務(wù)。私塾在線?frombook

38、獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程樂觀并發(fā)控制n 應(yīng)用程序級別的版本檢查簡單點說,就是由應(yīng)用程序自己實現(xiàn)版本檢查來確保對話事務(wù)的隔離,從數(shù)據(jù)訪問的角度來說是最低效的,不推薦使用。n 擴展周期的session和自動版本化Hibernate 使用擴展周期的 Session 的方式,或者脫管對象實例的方式來提供自動版本檢查。單個 Session 實例和它所關(guān)聯(lián)的所有持久化對象實例都被用

39、于整個對話,這被稱為 sessionper-conversation。Hibernate 在同步的時候進行對象實例的版本檢查,如果檢測到并發(fā)修改則拋出異常。由開發(fā)人員來決定是否需要捕獲和處理這個異常(通常的抉擇是給用戶 提供一個合并更改,或者在無臟數(shù)據(jù)情況下重新進行業(yè)務(wù)對話的機會)。在等待用戶交互的時候, Session 斷開底層的 JDBC 連接。這種方式以數(shù)據(jù)庫訪問的角度來說是最高效的方式。應(yīng)用程序不需要關(guān)心版本檢查或脫管對象實例的重新關(guān)聯(lián),在每個數(shù)據(jù)庫事務(wù)中,應(yīng)用程序也不需要載入讀取對象實例。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真

40、正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程悲觀鎖定-1n 通常不需要自己去管理鎖定策略Hibernate 總是使用數(shù)據(jù)庫的鎖定機制,從不在內(nèi)存中鎖定對象。因而用戶并不需要花很多精力去擔(dān)心鎖定策略的問題。通常情況下,只要為 JDBC 連接指定一下隔離級別,然后讓數(shù)據(jù)庫去搞定一切就夠了。然而,高級用戶有時候希望進行一個排它的悲觀鎖定,或者在一個新的事務(wù)啟動的時候,重新進行鎖定。n 類 LockMode 定義了Hibernate 所需的不同的鎖定級別1:當(dāng)更新

41、或者插入一行記錄的時候,鎖定級別自動設(shè)置為LockMode.WRITE。2:當(dāng)用戶顯式的使用數(shù)據(jù)庫支持的 SQL 格式 SELECT . FOR UPDATE 發(fā)送 SQL 的時候,鎖定級別設(shè)置為 LockMode.UPGRADE。3:當(dāng)用戶顯式的使用 Oracle 數(shù)據(jù)庫的 SQL 語句 SELECT . FOR UPDATE NOWAIT 的時候,鎖定級別設(shè)置 LockMode.UPGRADE_NOWAIT。4:當(dāng) Hibernate 在“可重復(fù)讀”或者是“序列化”數(shù)據(jù)庫隔離級別下讀取數(shù)據(jù)的時候,鎖定模式自動設(shè)置為 LockMode.READ。這種模式也可以通過用戶顯式指定進行設(shè)置。5:L

42、ockMode.NONE 代表無需鎖定。在 Transaction 結(jié)束時, 所有的對象都切換到該模式上來。與session 相關(guān)聯(lián)的對象通過調(diào)用 update() 或者 saveOrUpdate() 脫離該模式。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程悲觀鎖定-2n 顯示的指定鎖定模式1:調(diào)用 Session.load() 的時候指定鎖定模式(LockMo

43、de)。2:調(diào)用 Session.lock()。3:調(diào)用 Query.setLockMode()。n 顯示指定鎖定模式的說明1:如果在 UPGRADE 或者 UPGRADE_NOWAIT 鎖定模式下調(diào)用 Session.load(),并且要讀取的對象尚未被session 載入過,那么對象通過 SELECT . FOR UPDATE這樣的 SQL 語句被載入。如果為一個對象調(diào)用 load() 方法時,該對象已經(jīng)在另一個較少限制的鎖定模式下被載入了,那么 Hibernate 就對該對象調(diào)用lock() 方法。2:如果指定的鎖定模式是 READ,UPGRADE 或 UPGRADE_NOWAIT,那么

44、Session.lock() 就執(zhí)行版本號檢查。(在 UPGRADE 或者 UPGRADE_NOWAIT 鎖定模式下,執(zhí)行 SELECT . FOR UPDATE這樣的SQL語句。)3:如果數(shù)據(jù)庫不支持用戶設(shè)置的鎖定模式,Hibernate 將使用適當(dāng)?shù)奶娲J剑ǘ皇侨映霎惓#?。這一點可以確保應(yīng)用程序的可移植性。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900nnnnn理解和掌握J2EE事務(wù)相關(guān)的理論,尤其是事務(wù)傳播屬性,還有事務(wù)隔離級掌握Hibernate的樂觀并發(fā)控制熟悉Sessi

45、on和事務(wù)范圍,以及基本的處理方式熟悉數(shù)據(jù)庫事務(wù)聲明的方式了解悲觀鎖定的理論知識n 作業(yè):復(fù)習(xí)和掌握這些理論知識。Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程本節(jié)課程小結(jié)私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程本節(jié)課程概覽n Hibernate的性能提升包括:抓取策略、實例化集合

46、、集合性能n Hibernate的二級緩存對象的二級緩存、查詢緩存、管理緩存、以及使用EHCache來實現(xiàn)二級緩存的示例私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程第七部分:性能提升和二級緩存私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最

47、專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程抓取策略-1n 抓取策略(fetching strategy) 是指:當(dāng)應(yīng)用程序需要在(Hibernate實體對象圖的)關(guān)聯(lián)關(guān)系間進行導(dǎo)航的時候, Hibernate如何獲取關(guān)聯(lián)對象的策略。抓取策略可以在O/R映射的元數(shù)據(jù)中聲明,也可以在特定的HQL 或條件查詢(Criteria Query)中重載聲明。 Hibernate4 定義了如下幾種抓取策略:1:連接抓取(Join fetching) - Hibernate通過 在SELECT語句使用OUTER JOIN(外連接)來 獲得對象的

48、關(guān)聯(lián)實例或者關(guān)聯(lián)集合。2:查詢抓取(Select fetching) - 另外發(fā)送一條 SELECT 語句抓取當(dāng)前對象的關(guān)聯(lián)實體或集合。除非你顯式的指定lazy=false禁止 延遲抓取,否則只有當(dāng)真正訪問關(guān)聯(lián)關(guān)系的時候,才會執(zhí)行第二條select語句。3:子查詢抓?。⊿ubselect fetching) - 另外發(fā)送一條SELECT 語句抓取在前面查詢到(或者抓取到)的所有實體對象的關(guān)聯(lián)集合。除非你顯式的指定lazy=false 禁止延遲抓取否則只有當(dāng)你真正訪問關(guān)聯(lián)關(guān)系的時候,才會執(zhí)行第二條select語句。4:批量抓?。˙atch fetching) - 對查詢抓取的優(yōu)化方案, 通過指定

49、一個主鍵或外鍵列表,Hibernate使用單條SELECT語句獲取一批對象實例或集合。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程抓取策略-2n 映射文檔中定義的抓取策略將會對以下列表條目產(chǎn)生影響:(1)通過 get() 或 load() 方法取得數(shù)據(jù)。(2)只有在關(guān)聯(lián)之間進行導(dǎo)航時,才會隱式的取得數(shù)據(jù)。(3)條件查詢(4)使用了 subselect 抓取的 H

50、QL 查詢通常情況下,我們并不使用映射文檔進行抓取策略的定制。更多的是,保持其默認值,然后在特定的事務(wù)中, 使用 HQL 的左連接抓?。╨eft joinfetch) 對其進行重載。這將通知 Hibernate在第一次查詢中使用外部關(guān)聯(lián)(outer join),直接得到其關(guān)聯(lián)數(shù)據(jù)。n 條件查詢 API 中,應(yīng)該調(diào)用 setFetchMode語句,例如:User user = (User) session.createCriteria(User.class).setFetchMode(permissions, FetchMode.JOIN).add( Restrictions.idEq(user

51、Id) ).uniqueResult();私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程抓取策略-3n Hibernate會區(qū)分下列各種情況:1:Immediate fetching,立即抓取 - 當(dāng)宿主被加載時,關(guān)聯(lián)、集合或?qū)傩员涣⒓醋ト ?:Lazy collection fetching,延遲集合抓取- 直到應(yīng)用程序?qū)线M行了一次操作時,集合才被抓取。(對

52、集合而言這是默認行為。)3:Extra-lazy collection fetching,Extra-lazy集合抓取 -對集合類中的每個元素而言,都是直到需要時才去訪問數(shù)據(jù)庫。除非絕對必要,Hibernate不會試圖去把整個集合都抓取到內(nèi)存里來(適用于非常大的集合)。4:Proxy fetching,代理抓取 - 對返回單值的關(guān)聯(lián)而言,當(dāng)其某個方法被調(diào)用,而非對其關(guān)鍵字進行g(shù)et操作時才抓取。5:No-proxy fetching,非代理抓取 - 對返回單值的關(guān)聯(lián)而言,當(dāng)實例變量被訪問的時候進行抓取。與上面的代理抓取相比,這種方法沒有那么“延遲”得厲害(就算只訪問標(biāo)識符,也會導(dǎo)致關(guān)聯(lián)抓取)但

53、是更加透明,因為對應(yīng)用程序來說,不再看到proxy。這種方法需要在編譯期間進行字節(jié)碼增強操作,因此很少需要用到。6:Lazy attribute fetching,屬性延遲加載 - 對屬性或返回單值的關(guān)聯(lián)而言,當(dāng)其實例變量被訪問的時候進行抓取。需要編譯期字節(jié)碼強化,因此這一方法很少用到私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程實例化集合和代理-1n 何時實例化

54、集合和代理既然Hibernate會采取代理來延遲集合的實例化,那么何時實例化這個集合呢?因為如果session關(guān)閉了,再訪問未初始化的集合活代理的話,將會拋出LazyInitializationException 異常。常見的解決方法,如下:n 在session打開期間去訪問集合的數(shù)據(jù)這是一種不好的做法,就是沒有什么用的去訪問集合的數(shù)據(jù),觸發(fā)其實例化n 使用Hibernate.initialized()方法靜態(tài)方法 Hibernate.initialized() 為你的應(yīng)用程序提供了一個便捷的途徑來延遲加載集合或代理。 只要它的 Session 處于 open 狀態(tài),Hibernate.ini

55、tialize(cat) 將會為 cat 強制對代理實例化。同樣,Hibernate.initialize(cat.getKittens()對kittens的集合具有同樣的功能。n 保持Session一直處于open狀態(tài),直到集合被實例化通常又有兩種方法:私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程實例化集合和代理-2n Open Session in View

56、模式在一個基于Web的應(yīng)用中,可以利用過濾器,在用戶請求時打開Hibernate的session、頁面生成結(jié)束時關(guān)閉 Session,示例如下:public class HibernateSessionRequestFilter implements Filter private SessionFactory sf;public void doFilter(.)throws.sf.getCurrentSession().beginTransaction();chain.doFilter(request, response);sf.getCurrentSession().getTransacti

57、on().commit();public void init(FilterConfig filterConfig) throws ServletException sf = new Configuration().configure().buildSessionFactory();public void destroy() n 在邏輯層為表現(xiàn)層準(zhǔn)備數(shù)據(jù)的時候,在session打開的情況下,實例化好所有需要的數(shù)據(jù)。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Jav

58、a就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程集合性能-1n 要完全理解Hibernate各種集合的關(guān)系結(jié)構(gòu)和性能特點,必須同時考慮“用于Hibernate更新或刪除集合行數(shù)據(jù)的主鍵的結(jié)構(gòu)”。 因此得到了如下的分類:有序集合類、集合(sets)、包(bags)n 所有的有序集合類(maps, lists, arrays)都擁有一個由和 組成的主鍵。 這種情況下集合類的更新是非常高效的主鍵已經(jīng)被有效的索引,因此當(dāng)Hibernate試圖更新或刪除一行時,可以迅速找到該行數(shù)據(jù)n 集合(sets)的主鍵由和其他元素組成。對于有些元素來說,這很低效,特別

59、是組合元素,大文本或二進制數(shù)據(jù)。但是對于一對多或者多對多,set也可以達到同樣的高效性能n Bag是最差的。因為bag允許重復(fù)的元素值,也沒有索引字段,因此不可能定義主鍵。 Hibernate無法判斷出重復(fù)的行。當(dāng)這種集合被更改時,Hibernate將會先完整地移除 (通過一個(in a single DELETE))整個集合,然后再重新創(chuàng)建整個集合。 因此Bag是非常低效的。私塾在線?frombook 獨家提供配套教學(xué)視頻, 更有大量免費在線學(xué)習(xí)視頻獨家大放送編輯課件真正高質(zhì)量培訓(xùn)簽訂就業(yè)協(xié)議網(wǎng) 址:咨詢QQ:460190900Java私塾-最專業(yè)的Java就業(yè)培訓(xùn)專家,因為專業(yè),所以出色!

60、值得你的信賴!深入淺出學(xué)Hibernate4開發(fā)系列精品教程集合性能-2n Lists, maps 和sets用于更新效率最高1:有序集合類型和大多數(shù)set都可以在增加、刪除、修改元素中擁有最好的性能。2:在多對多中,set性能不如有序集合類型3:Hibernate中,set應(yīng)該是最通用的集合類型n Bag和list是反向集合類(也就是指定了inverse=true的集合類)中效率最高的在一種情況下,bag的性能(包括list)要比set高得多: 對于指明了inverse=true的集合類(比如說,標(biāo)準(zhǔn)的雙向的一對多關(guān)聯(lián)), 我們可以在未初始化(fetch)包元素的情況下直接向bag或list

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論