Hibernate_映射配置文件詳解.ppt_第1頁
Hibernate_映射配置文件詳解.ppt_第2頁
Hibernate_映射配置文件詳解.ppt_第3頁
Hibernate_映射配置文件詳解.ppt_第4頁
Hibernate_映射配置文件詳解.ppt_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

映射文件詳解,目標,學習hibernate的配置文件(hibernate.cfg.xml) 學習hibernate的映射聲明(*.hbm.xml),hibernate配置文件,hibernate配置文件主要用于配置數據庫連接和 hibernate 運行時所需的各種屬性 每個 hibernate 配置文件對應一個 configuration 對象。 hibernate配置文件可以有兩種格式: perties hibernate.cfg.xml,hibernate.cfg.xml的常用屬性,connection.url:數據庫url connection.username:數據庫用戶名 connection.password:數據庫用戶密碼 connection.driver_class:數據庫jdbc驅動 show_sql:是否將運行期生成的sql輸出到日志以供調試。取值 true | false dialect:配置數據庫的方言,根據底層的數據庫不同產生不同的sql語句,hibernate 會針對數據庫的特性在訪問時進行優(yōu)化。 hbm2ddl.auto:在啟動和停止時自動地創(chuàng)建,更新或刪除數據庫模式。取值 create | update | create-drop mapping resource:映射文件配置,配置文件名必須包含其相對于根的全路徑 connection.datasource :jndi數據源的名稱,jdbc.fetch_size 和 jdbc.batch_size,jdbc.fetch_size:實質是調用 statement.setfetchsize() 方法設定jdbc的statement讀取數據的時候每次從數據庫中取出的記錄條數。例如一次查詢1萬條記錄,對于oracle的jdbc驅動來說,是不會 1 次性把1萬條取出來的,而只會取出fetch size條數,當紀錄集遍歷完了這些記錄以后,再去數據庫取fetch size條數據。因此大大節(jié)省了無謂的內存消耗。當然fetch size設的越大,讀數據庫的次數越少,速度越快;fetch size越小,讀數據庫的次數越多,速度越慢。oracle數據庫的jdbc驅動默認的fetch size=10,是一個保守的設定,根據測試,當fetch size=50的時候,性能會提升1倍之多,當fetch size=100,性能還能繼續(xù)提升20%,fetch size繼續(xù)增大,性能提升的就不顯著了。建議使用oracle時將fetch size設到50。并不是所有的數據庫都支持fetch size特性,例如mysql就不支持。mysql就像上面那種最壞的情況,總是一下就把1萬條記錄完全取出來,內存消耗會非常非常驚人!這個情況就沒有什么好辦法了 hibernate.jdbc.batch_size:設定對數據庫進行批量刪除,批量更新和批量插入的時候的批次大小,有點相當于設置buffer緩沖區(qū)大小的意思。batch size越大,批量操作的向數據庫發(fā)送sql的次數越少,速度就越快。測試結果是當batch size=0的時候,使用hibernate對oracle數據庫刪除1萬條記錄需要25秒,batch size = 50的時候,刪除僅僅需要5秒!可見有多么大的性能提升!oracle數據庫 batch size = 30 的時候比較合適。 這兩個選項非常重要,將嚴重影響hibernate的crud(create,read,update,delete)性能!,配置 c3p0數據庫連接池,c3p0連接池是hibernate推薦使用的連接池,若需要使用該連接池時,需要將c3p0的jar包拷貝到 web-inf 的 lib 目錄下,pojo 類和數據庫的映射文件*.hbm.xml,pojo 類和關系數據庫之間的映射可以用一個xml文檔(xml document)來定義。映射按照pojo的定義來創(chuàng)建,而非表的定義。 通過 pojo 類的數據庫映射文件,hibernate可以理解持久化類和數據表之間的對應關系,也可以理解持久化類屬性與數據庫表列之間的對應關系,映射文件示例,映射文件說明,hibernate-mapping 類層次:class 主鍵。id 基本類型:property 自定義類:many-to-one | one-to-one 集合:set | list | map | array one-to-many many-to-many 子類:subclass | joined-subclass 其它:component | any等 查詢語句:query(用來放置查詢語句,便于對數據庫查詢的統(tǒng)一管理和優(yōu)化) 注意:一個hibernate-mapping中可以同時定義多個類。,hibernate-mapping,hibernate-mapping 是 hibernate 映射文件的根元素 schema (可選): 數據庫schema的名稱。 catalog (可選): 數據庫catalog的名稱。 default-cascade (可選 - 默認為 none): 默認的級聯(lián)風格。 default-access (可選 - 默認為 property): hibernate用來訪問屬性的策略??梢酝ㄟ^實現(xiàn)propertyaccessor接口自定義。 default-lazy (可選 - 默認為 true): 指定了未明確注明lazy屬性的java屬性和集合類, hibernate會采取什么樣的默認加載風格。 auto-import (可選 - 默認為 true): 指定我們是否可以在查詢語言中使用非全限定的類名(僅限于本映射文件中的類)。 package (可選): 指定一個包前綴,如果在映射文檔中沒有指定全限定的類名, 就使用這個作為包名。,class,class:定義一個持久化類 name (可選): 持久化類(或者接口)的類名 table (可選 - 默認是類的非全限定名): 對應的數據庫表名 discriminator-value (可選 - 默認和類名一樣): 一個用于區(qū)分不同的子類的值,在多態(tài)行為時使用。它可以接受的值包括 null 和 not null。,主鍵-id,id:被映射的類必須定義對應數據庫表主鍵字段。大多數類有一個javabean風格的屬性, 為每一個實例包含唯一的標識。 元素定義了該屬性到數據庫表主鍵字段的映射。 name (可選): 標識持久化類屬性的名字。 type (可選): 標識hibernate類型的名字。 column (可選 - 默認為屬性名): 主鍵字段的名字。,主鍵生成策略generator,可選的子元素是一個java類的名字, 用來為該持久化類的實例生成唯一的標識。如果這個生成器實例需要某些配置值或者初始化參數, 用元素來傳遞。,主鍵生成策略generator,所有的生成器都實現(xiàn)org.hibernate.id.identifiergenerator接口。某些應用程序可以選擇提供他們自己特定的實現(xiàn)。當然, hibernate提供了很多內置的實現(xiàn):,推薦使用,基本類型property,property:為類定義了一個持久化的,javabean風格的屬性 name: 屬性的名字,以小寫字母開頭。 column (可選 - 默認為屬性名字): 對應的數據庫字段名。 type (可選): 一個hibernate類型的名字。 lazy (可選 - 默認為 false): 指定實例變量第一次被訪問時,這個屬性是否延遲抓?。╢etched lazily)。 unique (可選): 為該字段添加唯一的約束。 not-null (可選):為該字段添加非空約束。 optimistic-lock (可選 - 默認為 true): 指定這個屬性在做更新時是否需要獲得樂觀鎖定(optimistic lock)。,hibernate內置映射類型,hibernate內置映射類型,映射集合屬性,集合屬性大致有兩種: 單純的集合屬性,如像list、set或數組等集合屬性 map結構的集合屬性,每個屬性值都有對應的key映射 集合映射的元素大致有如下幾種: list:用于映射list集合屬性 set:用于映射set集合屬性 map:用于映射map集合性 array:用于映射數組集合屬性 bag:用于映射無序集合 idbag:用于映射無序集合,但為集合增加邏輯次序,list集合映射,list是有序集合,因此持久化到數據庫時也必須增加一列來表示集合元素的次序??聪旅娴某志没悾搉ews類有個集合屬性:schools,該屬性對應學校。而集合屬性只能以接口聲明,因此下面代碼中,schools的類型能是list,不能是arraylist,但該集合屬性必須使用實現(xiàn)類完成初始化。,list集合映射,在作相應映射時,list元素要求用list-index的子元素來映射有序集合的次序列。集合的屬性的值會存放有另外的表中,不可能與持久化類存儲在同一個表內。因此須以外鍵關聯(lián),用key元素來映射該外鍵列。,list集合映射,測試程序:,list集合映射,生成的表及插入的數據: person_table,list集合映射,生成的表及插入的數據: school_table,set集合映射,set集合屬性映射與list非常相似,但因為set是無序的,不可重復的集合。因此set元素無須使用index元素來指定集合元素次序。映射文件與list相似,區(qū)別在于使用set元素時,無須增加index列來保存集合的次序,set集合映射,測試程序,set集合映射,生成的表及插入的數據: school_table,注:映射 set 集合屬性時,如果 element 元素包括 not-null = “true” 屬性,則集合屬性表以關聯(lián)持久化類的外鍵和元素列作為聯(lián)合主鍵,否則該表沒有主鍵。但 list 集合屬性不會,list 集合屬性總是以外鍵列和元素此序列作為聯(lián)合主鍵。,bag元素映射,bag元素既可以為list集合屬性映射,也可以為collection集合屬性映射。不管是哪種集合屬性,使用bag元素都將被映射成無序集合,而集合屬性對應的表沒有主鍵。bag 元素只需要 key 元素來映射外鍵列,使用 element 元素來映射集合屬性的每個元素。,map集合屬性,map不僅需要映射屬性值,還需要映射屬性key。映射map集合屬性時,同樣需要指定外鍵列,同時還必須指定map的key列。系統(tǒng)將以外鍵列和key列作為聯(lián)合主鍵。 map集合屬性使用map元素映射時,該map元素需要key和map-key兩個子元素。其中key子元素用于映射外鍵列,而map-key子元素則用于映射map集合的key。而map-key和element元素都必須確定type屬性,集合屬性的性能的分析,對于集合屬性,通常推薦使用延遲加載策略。所謂延遲加載就是當系統(tǒng)需要使用集合屬性時才從數據庫裝載關聯(lián)的數據。 hibernate對集合屬性默認采用延遲加載,在某些特殊的情況下為set,,list,map等元素設置lazy=“false”屬性來取消延遲加載。 可將集合分成如下兩類: 有序集合:集合里的元素可以根據key或index訪問 無序集合:集合里的元素中只能遍歷 有序集合擁有由 key 和 index 組成的聯(lián)合主鍵,集合的屬性在增加、刪除及修改中擁有較好的性能表現(xiàn) - 主鍵已經被有效的索引,因此 hibernate 可以迅速的找到該行數據。 映射set集合屬性時,如果element元素包括not-null=“true”屬性,則集合屬性表以關聯(lián)持久化類的外鍵和元素列作為聯(lián)合主鍵,否則該表沒有主鍵,因此性能較差。 在設計較好的hiberate domain object中,集合屬性通常都會增加inverse=“true”的屬性,此時集合端不再控制關聯(lián)關系。因此無需考慮集合的更新性能。,映射組件屬性,組件屬性的意思是持久化類的屬性既不是基本數據類型,也不是 string 字符串,而是某個組件變量,該組件屬性的類型可以是自定義類。,映射組件屬性,顯然無法直接用 property 映射 name 屬性。為了映射組件屬性, hibernate 提供了 component 元素。每個 component 元素映射一個組件屬性,組件屬性必須指定該屬性的類型,component 元素中的 class 屬性用于確定組件的類型。,映射組件屬性,測試程序,映射組件屬性,生成的表及插入的數據: worker_table,集合組件屬性映射,集合除了存放 string 字符串以外,還可以存放組件類型。實際上,更多情況下,集合組件存放的都是組件類型。,集合組件屬性映射,對于有集合屬性 pojo, 需要使用 set, list, bag 等集合元素來映射集合屬性。如果集合里的元素是普通字符串,則使用 element 映射集合元素即可。如果集合元素也是定義類,則需使用 composite-element 子元素來映射集合元素。composite-element 元素映射一個組件類型,因此需要 class 元素確定元素的類型,該元素還支持 property 的子元素來定義組件類型的子屬性,hibernate 的關聯(lián)關系映射,客觀世界中的對象很少有孤立存在的。關聯(lián)關系是面向對象分析,面向對象設計最重要的知識。關聯(lián)關系大致有如下兩個分類: 單向關系:只需要單向訪問關聯(lián)端 單向 1-1 單向 1-n(不推薦使用) 單向 n-1 單向 n-n 雙向關系:關聯(lián)的兩端可以相互訪問 雙向 1-1 雙向 1-n 雙向 n-n,單向 n-1,單向 n-1 關聯(lián)只需從 n 的一端可以訪問 1 的一端。模型:多個人(person)對應同一個地址(address)。只需要從人實體端找到相應的地址實體。無須關心從某個地址找到全部住戶。,單向 n-1,person 端增加了 address 屬性,該屬性不是一個普通的組件屬性,而是引用了另外一個持久化類,使用 many-to-one 元素映射 n-1 的持久化屬性。 many-to-one 元素的作用類似于 property 元素,用于映射持久化類的某個屬性,區(qū)別是改元素映射的是關聯(lián)持久化類。與 property 元素類似,many-to-one 元素也必須擁有 name 屬性,用于確定該屬性的名字,column 屬性確定外鍵列的列名.,單向 n-1,生成的表 person_table address_table,基于外鍵的單向 1-1,單向 1-1,pojo 與 n-1 沒有絲毫區(qū)別。 基于外鍵的單向 1-1 映射文件:只需要在原有的 many-to-one 元素添加 unique=“true”,用以表示 n 的一端必須唯一即可,n的一端增加了唯一約束, 即成為單向 1-1. person_table,基于主鍵的單向 1-1,基于主鍵關聯(lián)的持久化類不能擁有自己的主鍵生成器,它的主鍵由關聯(lián)類負責生成。增加one-to-one元素來映射關聯(lián)屬性,必須為one-to-one元素增加constrained=“true“屬性,表明該類的主鍵由關聯(lián)類生成。,基于主鍵的單向 1-1,person_table,單向的 1-n,單向 1-n 關聯(lián)的 pojo 需要使用集合屬性。因為一的一端需要訪問 n 的一端,而 n 的一端將以集合的形式表現(xiàn)。 不推薦使用單向的 1-n 關聯(lián): 使用 1 的一端控制關聯(lián)關系時,會額外多出 update 語句。 插入數據時無法同時插入外鍵列,因而無法為外鍵列添加非空約束,單向的 n-n,單向 n-n,pojo 與 1-n 沒有絲毫區(qū)別。 與映射集合屬性類似,必須為set,list等集合元素添加 key 子元素,用以映射關聯(lián)的外鍵列。與集合映射不同的是,建立 n-n 關聯(lián)時,集合中的元素使用 many-to-many,而不是使用 element 子元素 n-n 的關聯(lián)必須使用連接表。,單向的 n-n 的測試程序,單向的 n-n,生成的表及插入的數據: address_table person_table person_address_table,雙向 1-n,對于 1-n 的關聯(lián),hibernate 推薦使用雙向關聯(lián),而且不要讓 1 的一端控制關聯(lián)關系,而是使用 n 的一端控制關聯(lián)關系。 雙向 1-n 與 n-1 是完全相同的兩種情形,雙向 1-n,1 的一端需要使用集合屬性元素來映射關聯(lián)關系。集合屬性元素同樣需要增加 key 元素,還需要使用 one-to-many 元素來映射關聯(lián)屬性,雙向 1-n,n 的一端需要增加 many-to-one 元素來映射關聯(lián)屬性。,注意:在上面的配置文件中,兩個持久化類的配置文件都需要指定外鍵列的列名,此時不可以省略。因為不使用連接表的1-n關聯(lián)的外鍵,而外鍵只保存在n一端的表中,如果兩邊指定的外鍵列名不同,將導致關聯(lián)映射出錯。如果不指定外鍵列的列名,該列名由系統(tǒng)自動生成,而系統(tǒng)很難保存自動生成的兩個列名相同。,雙向 1-n,測試程序1:,雙向 1-n,生成的表及插入的數據: customers_table orders_table,雙向 1-n,測試程序1產生的 sql 語句: 僅僅save(customer),并沒有save(order)但卻執(zhí)行了三條sql,由生成的sql語句可以知道,將用戶 tonggang 添加到customers表中的同時也將 order1及order2添加到orders表中!這是因為在 customers.hbm.xml 映射配置中,set節(jié)點的設置了cascade=save-update,所以當保存或更新customers的時候也會自動保存相應的orders對象!,雙向 1-n,注釋掉測試程序 1 中的訂單關聯(lián)用戶的代碼: 生成同樣的 sql 語句,同樣的數據表 customers_table 中插入的數據 orders_table中插入的數據 在customers.hbm.xml的set節(jié)點中加了屬性 inverse=true,這句話的意思是將主控制權交出去:交給了orders,也就是用戶與訂單之間從屬關系主要是由orders對象來確定,也即訂單自己來決定它屬于哪個對象。所以在這里,將訂單關聯(lián)用戶的代碼注釋掉后,雖然后面用戶關聯(lián)了訂單,但因為用戶已經將主動權交出,所以hibernate在save訂單的時候并不知道訂單是屬于哪個用戶,自然customers_id字段填空值。,雙向 1-n,將customers.hbm.xml中的 inverse=true 去掉 生成的 sql 語句: 數據庫表及插入的數據跟第一種情況相同 原來這種情況,hibernate是先將訂單持久化到表中,因為注釋了訂單關聯(lián)用戶的代碼,所以hibernate還是先插入空值,然后再根據用戶關聯(lián)訂單來更新orders表將 customers_id字段修改為正確的值!當數據量很大的時候,這樣的操作會影響性能,同時不能將customers_id字段定義為not null。,雙向 1-n,將inverse=true加上,而用戶關聯(lián)訂單的注釋掉 生成的 sql 語句: 運行結果是僅僅將 用戶添加到表中去了.關聯(lián)是僅僅減緩到訂單屬于哪個用戶,也就是關聯(lián)訂單的 customers_id 字段!但用戶類里,屬性 set orders = new hashset();初始是為空的,這樣雖然訂單關聯(lián)了用戶,但用戶對象內的orders屬性還是為空,訂單并沒有產生,這樣hibernate在保存用戶的時候,判斷集合為空,不會去添加訂單.,inverse,只有集合標記(set/map/list/array/bag)才有inverse屬性 在 hibernate 中,inverse 指定了關聯(lián)關系的方向。關聯(lián) 關系中 inverse = false 的為主動方,由主動方負責維護 關聯(lián)關系 在沒有設置 inverse=true 的情況下,父子兩邊都維護父子 關系 在 1-n 關系中,將 many 方設為主控方(inverse = false) 將有助于性能改善(如果要國家元首記住全國人民的名字,不 是太可能,但要讓全國人民知道國家元首,就容易的多) 在 1-n 關系中,若將 1 方設為主控方 會額外多出 update 語句。 插入數據時無法同時插入外鍵列,因而無法為外鍵列添加非空約束,cascade,只有關系標記才有cascade屬性:many-to-one,one-to-one ,set(map, bag, idbag, list, array) + one-to-many(many-to-many) 級聯(lián)指的是當主控方執(zhí)行操作時,關聯(lián)對象(被動方)是否 同步執(zhí)行同一操作。 pojo和它的關系屬性的關系就是“主控方 - 被動方”的關 系,如果關系屬性是一個set,那么被動方就是set中的每一 個元素。 一個操作因級聯(lián)cascade可能觸發(fā)多個關聯(lián)操作。前一個操作 叫“主控操作”,后一個操作叫“關聯(lián)操作”。 inverse 指的是關聯(lián)關系的控制方向,而cascade指的是層級之間的連鎖操作。,cascade,cascade屬性的可選值: all : 所有情況下均進行關聯(lián)操作。 none:所有情況下均不進行關聯(lián)操作。這是默認值。 save-update:在執(zhí)行save/update/saveorupdate時進行關聯(lián)操作。 delete:在執(zhí)行delete時進行關聯(lián)操作 delete-orphan:表示刪除孤兒,delete-orphan在前者的基礎上增加了一點,針對持久化對象,如果它和它所關聯(lián)的對象的引用關系不存在了,則進行級聯(lián)刪除。 all-delete-orphan:包含all和delete-orphan的行為,雙向n-n關聯(lián),雙向n-n關聯(lián)需要兩端都使用集合屬性,兩端都增加對集合屬性的訪問。雙向n-n關聯(lián)也必須使用連接表,雙向n-n關聯(lián),雙向n-n的關聯(lián)映射需要在兩邊增加集合元素,用于映射集合屬性。集合屬性應增加key子元素用以映射外鍵列,集合元素里還應增加many-to-many子元素關聯(lián)實體類,注意:在雙向n-n關聯(lián)的兩邊都需定連接表的表名及外鍵列的列名。兩個集合元素set的table元素的值必須指定,而且必須相同。set元素的兩個子元素:key和many-to-many都必須指定column屬性,其中,key和many-to-many分別指定本持久化類和關聯(lián)類在連接表中的外鍵列名,因 此兩邊的key與many-to-many的column屬性交叉相同。也就是說,一邊的set元素的key的cloumn值為a,many-to-many的column為b;則另一邊的set元素的key的column值b,many-to-many的column值為a.,雙向1-1關聯(lián),單向的1-1關聯(lián)有三種映射策略:基于主鍵,基于外鍵和使用連接表。雙向的1-1關聯(lián)同樣有這三種映射策略。 雙向的1-1關聯(lián)需要修改pojo類,讓兩邊都增加對關聯(lián)類的訪問,基于外鍵的雙向1-1關聯(lián),對于基于外鍵的1-1關聯(lián),其外鍵可以存放在任意一邊,在需要存放外鍵一端,增加many-to-one元素。為many-to-one元素增加unique=“true” 屬性來表示為1-1關聯(lián),并用name屬性來指定關聯(lián)屬性的屬性名。 另一端需要使用one-to-one元素,則該元素使用name屬性指定關聯(lián)的屬性名。為了讓系統(tǒng)懂得不再為本表增加一列,因此使用外鍵關聯(lián),用property-ref屬性來引用關聯(lián)類的主鍵。 property-ref:指定目標實體的表中外鍵引用的列。如果引用表的外鍵不引用關系的”多”端的主鍵,可以使用p該屬性指定它應用的列。這應該只用于已有數據庫的數據庫設計 - 在創(chuàng)建新的數據庫模式時,外鍵總是應該引用相關表的主鍵,基于外鍵的雙向1-1關聯(lián),基于外鍵的雙向1-1關聯(lián),生成的表 person_table address_table,基于主鍵的雙向1-1關聯(lián),基于主鍵的映射策略:指一端的主鍵生成器使用foreign略, 表明根據對方的主鍵來生成自己的主鍵,自己并不能獨立生 成主鍵。 任意一邊都可以采用foreign主鍵生成器,表明根據對方主鍵 生成自己的主鍵。 采用foreign主鍵生成器策略的一端增加one-to-one元素映射 關聯(lián)屬性,其one-to-one屬性還應增加constrained=“true”屬 性;另一端增加one-to-one元素映射關聯(lián)屬性。 constrained(約束) :表明該類對應的表對應的數據庫表,和被關聯(lián)的對象所對應的數據庫表之間,通過一個外鍵引用對主鍵進行約束。,基于主鍵的雙向1-1關聯(lián),基于主鍵的雙向1-1關聯(lián),生成的表 person_table address_table,繼承映射,對于面向對象的程序設計語言而言,繼承和多態(tài)是兩個最基本的概念。hibernate 的繼承映射可以理解持久化類之間的繼承關系。例如:人和學生之間的關系。學生繼承了人,可以認為學生是一個特殊的人,如果對人進行查詢,學生的實例也將被得到。,繼承映射,hibernate支持三種繼承映射策略: 每個具體類一張表(table per concrete class) 將域模型中的每一個實體對象映射到一個獨立的表中,也就是說不用在關系開數據模型中考慮域模型中的繼承關系和多態(tài)。 每個類分層結構一張表(table per class hierarchy) 對于繼承關系中的子類使用同一個表,這就需要在數據庫表中增加額外的區(qū)分子類類型的字段。 每個子類一張表(table per subclass) 域模型中的每個類映射到一個表,通過關系數據模型中的外鍵來描述表之間的繼承關系。這也就相當于按照域模型的結構來建立數據庫中的表,并通過外鍵來建立表之間的繼承關系。,采用 subclass 元素的繼承映射,采用 subclass 元素的繼承映射可以實現(xiàn)對于繼承關系中的子類使用同一個表 在這種映射策略下,整個繼承樹的所有實例都保保存在同一個表內。因為父類和子類的實例全部保存在同一個表中,因此需要在該表內增加一列,使用該

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論