Hibernate個人學習筆記_第1頁
Hibernate個人學習筆記_第2頁
Hibernate個人學習筆記_第3頁
Hibernate個人學習筆記_第4頁
Hibernate個人學習筆記_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、hibernate使用之后jdbc大部分不用再編寫了輕量級框架沒有侵入性適合對象關(guān)系清晰、不適合聚集性批量操作不適合需要使用數(shù)據(jù)庫特定性功能的情況q 課程目標:q 理解o/r mapping原理q 掌握hibernate開發(fā)的相關(guān)知識q 能使用hibernate進行實際項目開發(fā)q hibernate高手進級:性能優(yōu)化策略目錄 什么是hibernate 快速體驗hibernate的開發(fā)步驟 認識hibernate基本核心接口 hibernate的對象關(guān)系映射 hibernate查詢語句(hql) 直接使用jdbc操作數(shù)據(jù)庫的步驟很繁瑣 jdbc操作的是關(guān)系型數(shù)據(jù)庫 我們用java開發(fā)程序,則使用

2、面向?qū)ο蟮乃枷?hibernate正是在這兩種不同的模型之間建立關(guān)聯(lián),hibernate給我們提供了利用面向?qū)ο蟮乃枷雭聿僮麝P(guān)系型數(shù)據(jù)的接口hibernate能做什么? - 理解o/r映射 hibernate能幫助我們利用面向?qū)ο蟮乃枷耄_發(fā)基于關(guān)系型數(shù)據(jù)庫的應(yīng)用程序 第一:將對象數(shù)據(jù)保存到數(shù)據(jù)庫 第二:將數(shù)據(jù)庫數(shù)據(jù)讀入對象中1、第一個hibernate項目,入門1.1、hibernate_first創(chuàng)建步驟1、新建java項目2、創(chuàng)建user library環(huán)境搭建,加入如下jar* hibernate_home/hibernate3.jar* hibernate_home/lib/*.ja

3、r* mysql jdbc驅(qū)動3、創(chuàng)建hibernate配置文件hibernate.cfg.xml,為了便于調(diào)試最好加入log4j配置文件位于:hibernate-3.2etc 目錄下4、定義實體類 user.java5、定義user類的映射文件user.hbm.xml6、將user.hbml.xml文件加入到hibernate.cfg.xml文件中7、編寫hbm2ddl工具類:exportdb.java將實體類 生成數(shù)據(jù)庫表public static void main(string args) /讀取hibernate.cfg.xml文件configuration cfg = new co

4、nfiguration().configure();拿到hibernate配置文件hibernate.cfg.xmlschemaexport export = new schemaexport(cfg);export.create(true, true);8、開發(fā)客戶端client.java為了方便跟蹤sql執(zhí)行,在hibernate.cfg.xml文件中加入truepublic static void main(string args) /讀取hibernate.cfg.xml文件configuration cfg = new configuration().configure();/創(chuàng)建s

5、essionfactorysessionfactory sf = cfg.buildsessionfactory();session session = null;trysession = sf.opensession();/開啟事務(wù)session.begintransaction();user user = new user();user.setpassword(jbjb);user.setname(不得了);user.setcreatedate(new date();user.setexpiredate(new date();/保存數(shù)據(jù)session.save(user);/提交事務(wù)ses

6、sion.gettransaction().commit();catch(exception e)e.printstacktrace();/回滾事務(wù)session.gettransaction().rollback();finallyif(session != null)if(session.isopen()/close sessionsession.close();1.2、步驟總結(jié) 實體類(持久化類)的設(shè)計 實體類與關(guān)系數(shù)據(jù)庫的映射 應(yīng)用的開發(fā)1.3、hibernate核心接口1.3.1 configuration 概述:configuration 類負責管理hibernate 的配置信息。

7、它包括如下內(nèi)容:q hibernate運行的底層信息:數(shù)據(jù)庫的url、用戶名、密碼、jdbc驅(qū)動類,數(shù)據(jù)庫dialect,數(shù)據(jù)庫連接池等。q hibernate映射文件(*.hbm.xml)。 hibernate配置的兩種方法:q 屬性文件(perties)。調(diào)用代碼:configuration cfg = new configuration(); q xml文件(hibernate.cfg.xml)。一般采用這種配置調(diào)用代碼:configuration cfg = new configuration().configure();com.mysql.jdbc.driv

8、er jdbc:mysql:/localhost/hibernate_firstrootrootorg.hibernate.dialect.mysqldialect true 1.3.2 sessionfactory 概述:應(yīng)用程序從sessionfactory(會話工廠)里獲得session(會話)實例。它在多個應(yīng)用線程間進行共享。通常情況下,是線程安全的,整個應(yīng)用只有唯一的一個會話工廠例如在應(yīng)用初始化時被創(chuàng)建。然而,如果你使用hibernate訪問多個數(shù)據(jù)庫,你需要對每一個數(shù)據(jù)庫使用一個會話工廠。 會話工廠緩存了生成的sql語句和hibernate在運行時使用的映射元數(shù)據(jù)。 他的創(chuàng)建很耗時

9、的,通常放在一個靜態(tài)方法里面只創(chuàng)建一次 static try configuration cfg = new configuration().configure();factory = cfg.buildsessionfactory(); catch(exception e) e.printstacktrace(); 調(diào)用代碼:sessionfactory sessionfactory = cfg.buildsessionfactory(); 說明:sessionfactory由configuration對象創(chuàng)建,所以每個hibernate配置文件,實際上是對sessionfactory的配置

10、1.3.3 session(會話) 概述:q session不是線程安全的,它代表與數(shù)據(jù)庫之間的一次操作,它的概念介于connection和transaction之間。q session也稱為持久化管理器,因為它是與持久化有關(guān)的操作接口。q session通過sessionfactory打開,在所有的工作完成后,需要關(guān)閉。q 它與web層的httpsession沒有任何關(guān)系。 調(diào)用代碼session session = sessionfactory.opensession();2測試實體對象的生命周期2.1 junit簡介:* 編寫測試類xxxtest,需要繼承testcase* 編寫單元測試

11、方法,測試方法必須以test開頭,測試方法不能含有參數(shù)和返回值,如: public void testhello1() * 最好單元測試的代碼單獨建立一個目錄2.2了解hibernate中crud操作public class sessiontest extends testcase public void testsave1() session session = null;transaction tx = null;user user = null;try session = hibernateutils.getsession();tx = session.begintransaction(

12、);/transient狀態(tài)user = new user();user.setname(李四);user.setpassword(123);user.setcreatetime(new date();user.setexpiretime(new date();/persistent狀態(tài),當屬性發(fā)生改變的時候,hibernate會自動和數(shù)據(jù)庫同步session.save(user);user.setname(王五);/session.update(user);mit();catch(exception e) e.printstacktrace();tx.rollback();fin

13、ally hibernateutils.closesession(session);/detached狀態(tài)user.setname(張三);try session = hibernateutils.getsession();session.begintransaction(); /persistent狀態(tài)session.update(user);session.gettransaction().commit();public void testreadbygetmethod1() session session = null;try session = hibernateutils.getse

14、ssion();session.begintransaction();/馬上發(fā)出查詢sql,加載user對象user user = (user)session.get(user.class, 402880d01b9bf210011b9bf2a2ff0001);system.out.println(= + user.getname();/persistent狀態(tài),當屬性發(fā)生改變的時候,hibernate會自動和數(shù)據(jù)庫同步user.setname(龍哥);session.gettransaction().commit();public void testreadbygetmeth

15、od2() session session = null;try session = hibernateutils.getsession();session.begintransaction();/采用get加載數(shù)據(jù),如果數(shù)據(jù)庫中不存在相應(yīng)的數(shù)據(jù),返回nulluser user = (user)session.get(user.class, asdfsafsdfdsf);session.gettransaction().commit();public void testreadbyloadmethod1() session session = null;try session = hibern

16、ateutils.getsession();session.begintransaction();/不會發(fā)出查詢sql,因為load方法實現(xiàn)了lazy(懶加載或延遲加載)/延遲加載:只有真正使用這個對象的時候,才加載(發(fā)出sql語句)/hibernate延遲加載實現(xiàn)原理是代理方式user user = (user)session.load(user.class, 402880d01b9bf210011b9bf2a2ff0001);system.out.println(= + user.getname();/persistent狀態(tài),當屬性發(fā)生改變的時候,hibernate會自

17、動和數(shù)據(jù)庫同步user.setname(發(fā)哥);session.gettransaction().commit();public void testreadbyloadmethod2() session session = null;try session = hibernateutils.getsession();session.begintransaction();/采用load加載數(shù)據(jù),如果數(shù)據(jù)庫中沒有相應(yīng)的數(shù)據(jù)/那么拋出objectnotfoundexceptionuser user = (user)session.load(user.class, 55555555);system.o

18、ut.println(user.getname();session.gettransaction().commit();public void testupdate1() session session = null;try session = hibernateutils.getsession();session.begintransaction();/手動構(gòu)造的detached狀態(tài)的對象user user = new user();user.setid(402880d01b9be8dc011b9be9b23d0001);user.setname(德華);session.update(use

19、r);session.gettransaction().commit();public void testdelete1() session session = null;try session = hibernateutils.getsession();session.begintransaction();/手動構(gòu)造的detached狀態(tài)的對象/user user = new user();/user.setid(402880d01b9be8dc011b9be9b23d0001);/user.setname(德華);/session.delete(user);user user = (use

20、r)session.load(user.class, 402880d01b9be8dc011b9be9b23d0001);session.delete(user刪除完之后user對象變成transient狀態(tài));session.gettransaction().commit();2.3了解get和load的區(qū)別?* get不支持lazy只有真正使用對象的時候才將其加載,又叫延遲加載,此處加載可理解為執(zhí)行sql語句,load支持lazy* 采用get加載數(shù)據(jù),如果沒有匹配的數(shù)據(jù),返回null,而load則拋出異常2.4 transient、persisten 、detached的狀態(tài)特征tran

21、sient狀態(tài)的特征?* 在數(shù)據(jù)庫中沒有與之匹配的數(shù)據(jù)* 沒有納入session的管理persistent狀態(tài)的特征?* persistent狀態(tài),當屬性發(fā)生改變的時候,hibernate會自動和數(shù)據(jù)庫同步庫數(shù)據(jù)庫中有與之匹配的數(shù)據(jù)* 納入了session可看做是持久化的管理器的管理* 在清理緩存(臟數(shù)據(jù)檢查)的時候,會和數(shù)據(jù)庫同步detached狀態(tài)的特征?* 在數(shù)據(jù)庫中有與之匹配的數(shù)據(jù)* 沒有納入session的管理 2.5 querytestpublic void testquery() session session = null;try session = hibernateutil

22、s.getsession();transaction tx = session.begintransaction();query query = session.createquery(from user區(qū)分大小寫,因為他指的是實體類而不是表);query.setfirstresult(0);query.setmaxresults(2);list userlist = query.list();for(iterator iterator=userlist.iterator();iterator.hasnext();)user user = (user)iterator.next();syste

23、m.out.println(user.getid();system.out.println(user.getname();mit();3、hibernate基本映射3.1 映射關(guān)系實體類-表實體類中的普通屬性-表字段采用標簽映射成數(shù)據(jù)庫表,通過、標簽將普通屬性映射成表字段所謂普通屬性指不包括自定義類、集合和數(shù)組等注意:如果實體類和實體類中的屬性和sql中的關(guān)鍵字重復,必須采用table或column重新命名3.2 實體類的設(shè)計原則* 實現(xiàn)一個默認的(即無參數(shù)的)構(gòu)造方法(constructor)* 提供一個標識屬性(identifier property)(可選)* 使用非fina

24、l的類 (可選),final之后就不能繼承了* 為持久化字段聲明訪問器(accessors)get、set方法3.3 主鍵生成策略:uuid、native和assigneduuid 用一個128-bit的uuid算法生成字符串類型的標識符, 這在一個網(wǎng)絡(luò)中是唯一的(使用了ip地址)。uuid被編碼為一個32位16進制數(shù)字的字符串。native 根據(jù)底層數(shù)據(jù)庫的能力選擇identity, sequence 或者hilo中的一個。assigned 讓應(yīng)用程序在save()之前為對象分配一個標示符。這是 元素沒有指定時的默認生成策略。 主鍵這個時候必須手動分配4. hibernate多對一關(guān)聯(lián)映射4

25、.1 多對一關(guān)聯(lián)映射的本質(zhì):* 將關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫,所謂的關(guān)聯(lián)關(guān)系是對象模型在內(nèi)存中的一個或多個引用,多個用戶(user)屬于一個組(group)會在多的一端加入一個外鍵,指向一的一端,這個外鍵是由中的column屬性定義的,如果忽略了這個屬性那么默認的外鍵與實體的屬性一致public class user private int id;private string name;private group group;這個屬性會指引many-to-one標簽指向那張表標簽的定義示例: * many-to-one的映射最常用,也是最容易理解和編寫的 生成的ddl語句如下create table

26、 t_group (id varchar(255) not null, name varchar(255), primary key (id)create table user (id varchar(255) not null, name varchar(255), password varchar(255), createtime datetime, expiretime datetime, groupid varchar(255), primary key (id)alter table user add index fk285febc3d18669 (groupid在多的一段添加一個關(guān)

27、系字段), add constraint fk285febc3d18669 foreign key (groupid) references t_group (id) 約束關(guān)系字段 從生成的ddl語句,我們可以知道,實際上是在user表上建立了一個指向group表的外鍵關(guān)聯(lián)理解級聯(lián)的含義?* 是對象的連鎖操作4.2 一對一關(guān)聯(lián)映射 (one-to-one) 兩個對象之間是一對一的關(guān)系,如person-idcard 有兩種策略可以實現(xiàn)一對一的關(guān)聯(lián)映射 主鍵關(guān)聯(lián):即讓兩個對象具有相同的主鍵值,以表明它們之間的一一對應(yīng)的關(guān)系;數(shù)據(jù)庫表不會有額外的字段來維護它們之間的關(guān)系,僅通過表的主鍵來關(guān)聯(lián) 唯一外

28、鍵關(guān)聯(lián):外鍵關(guān)聯(lián),本來是用于多對一的配置,但是如果加上唯一的限制之后,也可以用來表示一對一關(guān)聯(lián)關(guān)系;4.2.1一對一主鍵關(guān)聯(lián)映射單項關(guān)聯(lián)personal idcard一對一主鍵關(guān)聯(lián)映射:讓兩個實體對象的id保持相同,這樣可以避免多余的字段被創(chuàng)建person具體映射:idcardidcard idcard = new idcard();idcard.setcardno(88888888888888);person person = new person();person.setname(菜10);person.setidcard(idcard);/不會出現(xiàn)transientobjectexcep

29、tion異常/因為一對一主鍵關(guān)聯(lián)映射中,默認了cascade屬性session.save(person);session.gettransaction().commit();/不會出現(xiàn)transientobjectexception異常/因為一對一主鍵關(guān)聯(lián)映射中,默認了cascade屬性雙向關(guān)聯(lián)personidcard需要在idcard映射文件中加入標簽指向person,指示hibernate如何加載personidcard.hbm.xml:默認根據(jù)主鍵加載4.2.2 一對一唯一外鍵關(guān)聯(lián) 單向關(guān)聯(lián)person-idcard一對唯一外鍵關(guān)聯(lián)映射是多對一關(guān)聯(lián)映射的特例可以采用標簽,指定多的一端的u

30、nique=true,這樣就限制了多的一端的多重性為一通過這種手段映射一對一唯一外鍵關(guān)聯(lián) 雙向關(guān)聯(lián)personidcard一對一唯一外鍵關(guān)聯(lián)雙向,需要在另一端(idcard),添加標簽,指示hibernate如何加載其關(guān)聯(lián)對象,默認根據(jù)主鍵加載person,外鍵關(guān)聯(lián)映射中,因為兩個實體采用的是person的外鍵維護的關(guān)系,所以不能指定主鍵加載person,而要根據(jù)person的外鍵加載,所以采用如下映射方式:idcard映射文件里面:4.3一對多(one-to-many)一對多關(guān)聯(lián)映射利用了多對一關(guān)聯(lián)映射原理4.4.1 單向students端里面有沒有指向班級對象的屬性多對一關(guān)聯(lián)映射:在多的一

31、端加入一個外鍵指向一的一端,它維護的關(guān)系是多指向一一對多關(guān)聯(lián)映射:在多的一端加入一個外鍵指向一的一端,它維護的關(guān)系是一指向多加載一的一端的時候能把多的一端加載上來;也就是說一對多和多對一的映射策略是一樣的,只是站的角度不同classes.hbm.xml:元素在父映射元素定義了對新表的連接,并且在被連接表(students)中定義了一個外鍵(classid)引用原表(classes)的主鍵create table t_classes看不到students集合例 (id integer not null auto_increment, name varchar(255), primary key

32、(id)create table t_student (id integer not null auto_increment, name varchar(255), classesid integer, primary key (id)在一的一端維護關(guān)系的缺點:* 如果將t_student表里的classesid字段設(shè)置為非空,則無法保存* 因為不是在student這一端維護關(guān)系,所以student不知道是哪個班的, 所以需要發(fā)出多余的update語句來更新關(guān)系4.4.2 雙向一對多雙向關(guān)聯(lián)映射:* 在一一端的集合上使用,在對方表中加入一個外鍵指向一一端* 在多(student)一端采用cre

33、ate table t_classes (id integer not null auto_increment, name varchar(255), primary key (id)create table t_student (id integer not null auto_increment, name varchar(255), classesid integer, primary key (id)alter table t_student add index fk4b9075708ebc77f7 (classesid), add constraint fk4b9075708ebc7

34、7f7 foreign key (classesid) references t_classes (id)注意:標簽指定的外鍵字段必須和指定的外鍵字段一致,否則引用字段的錯誤classes端:student端:如果在一(class)的一端維護一對多關(guān)聯(lián)關(guān)系,hibernate會發(fā)出多余的udpate語句,所以我們一般在多(student)的一端來維護關(guān)聯(lián)關(guān)系inverse設(shè)置之前: hibernate: insert into t_student (name, classesid) values (?, ?)hibernate: insert into t_student (name, cla

35、ssesid) values (?, ?)hibernate: insert into t_classes (name) values (?)hibernate: update t_student set classesid=? where id=?hibernate: update t_student set classesid=? where id=?一的一端維護關(guān)系inverse設(shè)置之后:hibernate: insert into t_student (name, classesid) values (?, ?)hibernate: insert into t_student (nam

36、e, classesid) values (?, ?)hibernate: insert into t_classes (name) values (?)關(guān)于inverse屬性:inverse主要用在一對多和多對多雙向關(guān)聯(lián)上,inverse可以被設(shè)置到集合標簽上,默認inverse為false,所以我們可以從”一“一端和”多“一端維護關(guān)聯(lián)關(guān)系,如果設(shè)置成inverse為true,則我們只能從多一端來維護關(guān)聯(lián)關(guān)系注意:inverse屬性,只影響數(shù)據(jù)的存儲,也就是持久化inverse和cascade* inverse是關(guān)聯(lián)關(guān)系的控制方向* cascade操作上的連鎖反應(yīng)4.4 多對多(many-t

37、o-many)4.4.1 單向(user-role)中間的關(guān)系多需要建立第三方表 一般的設(shè)計中,多對多關(guān)聯(lián)映射,需要一個中間表 hibernate會自動生成中間表 hibernate使用many-to-many標簽來表示多對多的關(guān)聯(lián) 多對多的關(guān)聯(lián)映射,在實體類中,跟一對多一樣,也是用集合來表示的(1) column(必需): 中間映射表中,關(guān)聯(lián)目標表的關(guān)聯(lián)字段(2) class (必需): 類名,關(guān)聯(lián)目標類 (1)(1) column(必需):當前表的關(guān)聯(lián)字段,被連接表(students)中定義了一個外鍵(userid)引用原表(t_user)的主鍵* 具體映射方式:user.hbm.xml:

38、 * sql執(zhí)行語句:create table t_role (id integer not null auto_increment, name varchar(255), primary key (id)create table t_user (id integer not null auto_increment, name varchar(255), primary key (id)create table t_user_role (userid integer not null, roleid integer not null, primary key (userid, roleid)a

39、lter table t_user_role add index fk331dee5fdc0abe1 (userid), add constraint fk331dee5fdc0abe1 foreign key (userid) references t_user (id)alter table t_user_role add index fk331dee5f86b5677 (roleid), add constraint fk331dee5f86b5677 foreign key (roleid) references t_role (id)4.4.2 雙向5. session flush測

40、試(有點迷惑)session flush方法主要做了兩件事:* 清理緩存* 執(zhí)行sqlsession在什么情況下執(zhí)行flush* 默認在事務(wù)提交時commit()* 顯示的調(diào)用flush()* 在執(zhí)行查詢前,如:iteratehibernate按照save(insert),update、delete順序提交相關(guān)操作/* 測試uuid主鍵生成策略*/因為user的主鍵生成側(cè)路采用的是uuid,所以調(diào)用完成save后,只是將user納入到了session的管理,不會發(fā)出insert語句,但是id已經(jīng)生成,session中existsindatebase狀態(tài)為falsesession.save(us

41、er);/調(diào)用flush,hibernate會清理緩存,執(zhí)行sql/如果數(shù)據(jù)庫的隔離級別設(shè)置為為提交讀,那么我們可以看到flush過的數(shù)據(jù)/并且session中existsindatebase狀態(tài)為truesession.flush();/提交事務(wù)/默認情況下commit操作會先執(zhí)行flush清理緩存,所以不用顯示的調(diào)用flush/commit后數(shù)據(jù)是無法回滾的mit();/* 測試native主鍵生成策略 */因為user的主鍵生成策略為native,所以調(diào)用session.save后,將執(zhí)行insert語句,返回有數(shù)據(jù)庫生成的id/納入了session的管理,修改了sessio

42、n中existsindatebase狀態(tài)為true/【如果數(shù)據(jù)庫的隔離級別設(shè)置為為提交讀】,那么我們可以看到save過的數(shù)據(jù)session.save(user);mit();/因為user的主鍵生成側(cè)路采用的是uuid,所以調(diào)用完成save后,只是將user納入到了session的管理/不會發(fā)出insert語句,但是id已經(jīng)生成,session中existsindatebase狀態(tài)為falsesession.save(user);/將user對象從session中逐出,即session的entityentries屬性中逐出session.evict(user);/無法成功提交,因為

43、hibernate在清理緩存時,在session的insertions集合中取出user對象進行insert操作后/需要更新entityentries屬性中的existsindatabase為true,而我們采用evict已經(jīng)將user從session的entityentries/中逐出了,所以找不到相關(guān)數(shù)據(jù),無法更新,拋出異常mit();/因為user的主鍵生成側(cè)路采用的是uuid,所以調(diào)用完成save后,只是將user納入到了session的管理不會發(fā)出insert語句,但是id已經(jīng)生成,session中existsindatebase狀態(tài)為falsesession.save(

44、user);/flush后hibernate會清理緩存,會將user對象保存到數(shù)據(jù)庫中,將session中的insertions中的user對象清除,并且設(shè)置session中existsindatebase的狀態(tài)為truesession.flush();/將user對象從session中逐出,即session的entityentries屬性中逐出session.evict(user);/可以成功提交,因為hibernate在清理緩存時,在session的insertions集合中無法找到user對象所以就不會發(fā)出insert語句,也不會更新session中的existsindatabase的狀

45、態(tài)mit();數(shù)據(jù)庫的隔離級別注意:事務(wù)的隔離級別是對當前事務(wù)自身而言,及在【本次事務(wù)當中】的其他事務(wù)對自己的影響級別。隔離級別從低到高,是否存在臟讀是否存在不可重復讀是否存在幻讀read uncommitedyyyread commitednyyrepeated readmysql的默認級別nnyserializblennnreadcommitted:假設(shè)a事務(wù)對正在讀取數(shù)據(jù)data放置了共享鎖,那么data不能被其它事務(wù)改寫,所以當b事務(wù)對data進行讀取時總和a讀取的data數(shù)據(jù)是一致的,所以避免了臟讀。由于在a沒有提交之前可以對data進行改寫,那么b讀取到的某個值可能會在其讀取后被a更改從而導致了該值不能被重復取得;或者當b再次用相同的where字

溫馨提示

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

評論

0/150

提交評論