傳智播客hibernate李勇經(jīng)典課件_第1頁(yè)
傳智播客hibernate李勇經(jīng)典課件_第2頁(yè)
傳智播客hibernate李勇經(jīng)典課件_第3頁(yè)
傳智播客hibernate李勇經(jīng)典課件_第4頁(yè)
傳智播客hibernate李勇經(jīng)典課件_第5頁(yè)
已閱讀5頁(yè),還剩45頁(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、Hibernate原理與應(yīng)用講師:李勇IT資訊交流網(wǎng) WWW.IT315.ORG主要內(nèi)容引入安裝配置基本概念和CURDHQL和Criteria關(guān)聯(lián)映射 繼承映射集合映射懶加載 緩存 事務(wù)其他 Hibernate不適合的場(chǎng)景 與JPA的集成(annotation方式) 最佳實(shí)踐IT資訊交流網(wǎng) WWW.IT315.ORG引入模型不匹配(阻抗不匹配)Java面向?qū)ο笳Z(yǔ)言,對(duì)象模型,其主要概念有:繼承、關(guān)聯(lián)、多態(tài)等;數(shù)據(jù)庫(kù)是關(guān)系模型,其主要概念有:表、主鍵、外鍵等。解決辦法1使用JDBC手工轉(zhuǎn)換。2使用ORM(Object Relation Mapping對(duì)象關(guān)系映射)框架來(lái)解決,主流的ORM框架有H

2、ibernate、TopLink、OJB。IT資訊交流網(wǎng) WWW.IT315.ORG安裝配置下載地址http:/,本教程使用3.2.5。將下載目錄/hibernate3.jar和/lib下的hibernate運(yùn)行時(shí)必須的包加入classpath中:antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jarIT資訊交流網(wǎng) WWW.IT315.ORG基本概念和CURD開(kāi)發(fā)流程1由Domain object - mapping-db。(官方推薦)2由DB開(kāi)始,用工具生成mappin

3、g和Domain object。(使用較多)3由映射文件開(kāi)始。IT資訊交流網(wǎng) WWW.IT315.ORG基本概念和CURDDomain Object限制1.默認(rèn)的構(gòu)造方法(必須的)。2有無(wú)意義的標(biāo)示符id(主鍵)(可選)3非final的,對(duì)懶加載有影響(可選)Domain Java Object(User)public class User private int id;private String name;private Date birthDay;/getter setterIT資訊交流網(wǎng) WWW.IT315.ORG基本概念和CURDJava代碼1.初始化代碼(只做一次) Configu

4、ration cfg = new Configuration(); cfg.configure(“config.cfg.xml”); 也可以通過(guò)cfg.setProperty設(shè)置屬性。 SessionFactory sessionFactory = cfg.buildSessionFactory(); 2.模板代碼Session session = null;Transaction tx = null;trysession = sessionFactory.openSession();tx = session.beginTransaction();/你的代碼save,delete,update

5、,getmit();catch(Exception e)if(tx !=null)tx.rollback();throw e;finallyif(session != null)session.close(); IT資訊交流網(wǎng) WWW.IT315.ORG基本概念和CURDSession的幾個(gè)主要方法1.save,persist保存數(shù)據(jù),persist在事務(wù)外不會(huì)產(chǎn)生insert語(yǔ)句。2.delete,刪除對(duì)象3.update,更新對(duì)象,如果數(shù)據(jù)庫(kù)中沒(méi)有記錄,會(huì)出現(xiàn)異常。4.get,根據(jù)ID查,會(huì)立刻訪問(wèn)數(shù)據(jù)庫(kù)。5.Load,根據(jù)ID查,(返回的是代理,不會(huì)立即訪問(wèn)數(shù)據(jù)庫(kù))。6.saveOrUp

6、date,merge(根據(jù)ID和version的值來(lái)確定是save或update),調(diào)用merge你的對(duì)象還是托管的。7.lock(把對(duì)象變成持久對(duì)象,但不會(huì)同步對(duì)象的狀態(tài))。 IT資訊交流網(wǎng) WWW.IT315.ORG對(duì)象狀態(tài)瞬時(shí)(transient):數(shù)據(jù)庫(kù)中沒(méi)有數(shù)據(jù)與之對(duì)應(yīng),超過(guò)作用域會(huì)被JVM垃圾回收器回收,一般是new出來(lái)且與session沒(méi)有關(guān)聯(lián)的對(duì)象。持久(persistent):數(shù)據(jù)庫(kù)中有數(shù)據(jù)與之對(duì)應(yīng),當(dāng)前與session有關(guān)聯(lián),并且相關(guān)聯(lián)的session沒(méi)有關(guān)閉,事務(wù)沒(méi)有提交;持久對(duì)象狀態(tài)發(fā)生改變,在事務(wù)提交時(shí)會(huì)影響到數(shù)據(jù)庫(kù)(hibernate能檢測(cè)到)。脫管(detache

7、d):數(shù)據(jù)庫(kù)中有數(shù)據(jù)與之對(duì)應(yīng),但當(dāng)前沒(méi)有session與之關(guān)聯(lián);托管對(duì)象狀態(tài)發(fā)生改變,hibernate不能檢測(cè)到。IT資訊交流網(wǎng) WWW.IT315.ORG對(duì)象狀態(tài)IT資訊交流網(wǎng) WWW.IT315.ORGHQL和CriteriaHQL(Hibernate Query Language)面向?qū)ο蟮牟樵冋Z(yǔ)言,與SQL不同,HQL中的對(duì)象名是區(qū)分大小寫的(除了JAVA類和屬性其他部分不區(qū)分大小寫);HQL中查的是對(duì)象而不是和表,并且支持多態(tài);HQL主要通過(guò)Query來(lái)操作,Query的創(chuàng)建方式:Query q = session.createQuery(hql);from Personfrom

8、User user where =:namefrom User user where =:name and user.birthday :birthday CriteriaCriteria是一種比HQL更面向?qū)ο蟮牟樵兎绞?;Criteria的創(chuàng)建方式:Criteria crit = session.createCriteria(DomainClass.class);簡(jiǎn)單屬性條件如:criteria.add(Restrictions.eq(propertyName, value),criteria.add(Restrictions.eqProperty(propertyName,otherPro

9、pertyName)IT資訊交流網(wǎng) WWW.IT315.ORG基本功能練習(xí)實(shí)現(xiàn)UserDaopublic interface UserDao public void saveUser(User user);public User findUserById(int id);public User findUserByName(String name);public void updateUser(User user);public void remove(User user);IT資訊交流網(wǎng) WWW.IT315.ORG關(guān)聯(lián)映射多對(duì)一(Employee - Department) 一對(duì)多(Depa

10、rtment-Employee)一對(duì)一(room - door) 多對(duì)多(teacher - student) 組件映射(User-Name)集合映射(set, list, map, bag) inverse和cascade(Employee Department) IT資訊交流網(wǎng) WWW.IT315.ORG關(guān)聯(lián)映射多對(duì)一(Employee - Department)映射文件 ER圖IT資訊交流網(wǎng) WWW.IT315.ORG關(guān)聯(lián)映射一對(duì)一(Person - IdCard)1)基于主鍵的one-to-one(person的映射文件)idCardIT資訊交流網(wǎng) WWW.IT315.ORG關(guān)聯(lián)映射一

11、對(duì)一(Person - IdCard)2)基于外健的one-to-one,可以描述為多對(duì)一,加unique=“true”約束 property-ref用于指定關(guān)聯(lián)類的一個(gè)屬性,這個(gè)屬性將會(huì)和本外鍵相對(duì)應(yīng) IT資訊交流網(wǎng) WWW.IT315.ORG關(guān)聯(lián)映射多對(duì)多(teacher - student)在操作和性能方面都不太理想,所以多對(duì)多的映射使用較少,實(shí)際使用中最好轉(zhuǎn)換成一對(duì)多的對(duì)象模型;Hibernate會(huì)為我們創(chuàng)建中間關(guān)聯(lián)表,轉(zhuǎn)換成兩個(gè)一對(duì)多。 IT資訊交流網(wǎng) WWW.IT315.ORG關(guān)聯(lián)映射組件映射(User-Name)關(guān)聯(lián)的屬性是個(gè)復(fù)雜類型的持久化類,但不是實(shí)體即:數(shù)據(jù)庫(kù)中沒(méi)有表與該屬

12、性對(duì)應(yīng),但該類的屬性要之久保存的。當(dāng)組件的屬性不能和表中的字段簡(jiǎn)單對(duì)應(yīng)的時(shí)候可以選擇實(shí)現(xiàn):org.hibernate.usertype. UserType或org.hibernate.usertype. CompositeUserType IT資訊交流網(wǎng) WWW.IT315.ORG繼承映射對(duì)象模型(Java類結(jié)構(gòu))IT資訊交流網(wǎng) WWW.IT315.ORG繼承映射一個(gè)類繼承體系一張表(subclass)(表結(jié)構(gòu))IT資訊交流網(wǎng) WWW.IT315.ORG繼承映射每個(gè)子類一張表(joined-subclass) (表結(jié)構(gòu))IT資訊交流網(wǎng) WWW.IT315.ORG繼承映射每個(gè)子類一張表(join

13、ed-subclass) (映射文件)IT資訊交流網(wǎng) WWW.IT315.ORG繼承映射混合使用“一個(gè)類繼承體系一張表”和“每個(gè)子類一張表” (映射文件)IT資訊交流網(wǎng) WWW.IT315.ORG繼承映射每個(gè)具體類一張表(union-subclass) (表結(jié)構(gòu))IT資訊交流網(wǎng) WWW.IT315.ORG繼承映射每個(gè)具體類一張表(union-subclass) (映射文件)主健不能是identity類型,如果父類是abstract=”true”就不會(huì)有表與之對(duì)應(yīng)。 隱式多態(tài),映射文件沒(méi)有聯(lián)系,限制比較多很少使用。IT資訊交流網(wǎng) WWW.IT315.ORG集合映射集合映射(set, list,

14、array,bag, map)!- -!-IT資訊交流網(wǎng) WWW.IT315.ORG集合映射集合映射(set, list, array,bag, map)!表中有單獨(dú)的整型列表示list-index !表中有單獨(dú)的整型列表示list-index IT資訊交流網(wǎng) WWW.IT315.ORG集合映射集合映射(set, list, array,bag, map) IT資訊交流網(wǎng) WWW.IT315.ORG集合映射集合映射(set, list, array,bag, map)這些集合類都是Hibernate實(shí)現(xiàn)的類和JAVA中的集合類不完全一樣,set,list,map分別和JAVA中的Set,Lis

15、t,Map接口對(duì)應(yīng),bag映射成JAVA的List;這些集合的使用和JAVA集合中對(duì)應(yīng)的接口基本一致;在JAVA的實(shí)體類中集合只能定義成接口不能定義成具體類, 因?yàn)榧蠒?huì)在運(yùn)行時(shí)被替換成Hibernate的實(shí)現(xiàn)。集合的簡(jiǎn)單使用原則:大部分情況下用set,需要保證集合中的順序用list,想用java.util.List又不需要保證順序用bag。 IT資訊交流網(wǎng) WWW.IT315.ORG集合映射cascade和inverse (Employee Department)Casade用來(lái)說(shuō)明當(dāng)對(duì)主對(duì)象進(jìn)行某種操作時(shí)是否對(duì)其關(guān)聯(lián)的從對(duì)象也作類似的操作,常用的cascade:none,all,save-

16、update ,delete, lock,refresh,evict,replicate,persist,merge,delete-orphan(one-to-many) 。一般對(duì)many-to-one,many-to-many不設(shè)置級(jí)聯(lián),在和中設(shè)置級(jí)聯(lián)。inverse表“是否放棄維護(hù)關(guān)聯(lián)關(guān)系”(在Java里兩個(gè)對(duì)象產(chǎn)生關(guān)聯(lián)時(shí),對(duì)數(shù)據(jù)庫(kù)表的影響),在one-to-many和many-to-many的集合定義中使用,inverse=”true”表示該對(duì)象不維護(hù)關(guān)聯(lián)關(guān)系;該屬性的值一般在使用有序集合時(shí)設(shè)置成false(注意hibernate的缺省值是false)。one-to-many維護(hù)關(guān)聯(lián)關(guān)系

17、就是更新外鍵。many-to-many維護(hù)關(guān)聯(lián)關(guān)系就是在中間表增減記錄。注: 配置成one-to-one的對(duì)象不維護(hù)關(guān)聯(lián)關(guān)系IT資訊交流網(wǎng) WWW.IT315.ORG懶加載通過(guò)asm和cglib二個(gè)包實(shí)現(xiàn);Domain是非final的。1.session.load懶加載。2.one-to-one(元素)懶加載:必需同時(shí)滿足下面三個(gè)條件時(shí)才能實(shí)現(xiàn)懶加載(主表不能有constrained=true,所以主表沒(méi)有懶加載)lazy!=false 2)constrained=true 3)fetch=select3.one-to-many (元素)懶加載:1)lazy!=false 2)fetch=se

18、lect4.many-to-one (元素) :1)lazy!=false 2)fetch=select5.many-to-many (元素) :1)lazy!=false 2)fetch=select6.能夠懶加載的對(duì)象都是被改寫過(guò)的代理對(duì)象,當(dāng)相關(guān)聯(lián)的session沒(méi)有關(guān)閉時(shí),訪問(wèn)這些懶加載對(duì)象(代理對(duì)象)的屬性(getId和getClass除外)hibernate會(huì)初始化這些代理,或用Hibernate.initialize(proxy)來(lái)初始化代理對(duì)象;當(dāng)相關(guān)聯(lián)的session關(guān)閉后,再訪問(wèn)懶加載的對(duì)象將出現(xiàn)異常。IT資訊交流網(wǎng) WWW.IT315.ORG緩存緩存的作用主要用來(lái)提高性能

19、,可以簡(jiǎn)單的理解成一個(gè)Map;使用緩存涉及到三個(gè)操作:把數(shù)據(jù)放入緩存、從緩存中獲取數(shù)據(jù)、刪除緩存中的無(wú)效數(shù)據(jù)。一級(jí)緩存,Session級(jí)共享。save,update,saveOrUpdate,load,get,list,iterate,lock這些方法都會(huì)將對(duì)象放在一級(jí)緩存中,一級(jí)緩存不能控制緩存的數(shù)量,所以要注意大批量操作數(shù)據(jù)時(shí)可能造成內(nèi)存溢出;可以用evict,clear方法清除緩存中的內(nèi)容。 IT資訊交流網(wǎng) WWW.IT315.ORG緩存二級(jí)緩存,SessionFactory級(jí)共享。實(shí)現(xiàn)為可插拔,通過(guò)修改vider_class參數(shù)來(lái)改變;hibernate內(nèi)置了對(duì)EhCache,OSCa

20、che,TreeCache,SwarmCache的支持,可以通過(guò)實(shí)現(xiàn)CacheProvider和Cache接口來(lái)加入Hibernate不支持的緩存實(shí)現(xiàn)。在hibernate.cfg.xml中加入:或在映射文件的class元素加入子元素:其中usage:read-only,read-write,nonstrict-read-write,transactionalSession的:save(這個(gè)方法不適合native生成方式的主鍵),update,saveOrUpdate,list,iterator,get,load,以及Query,Criteria都會(huì)填充二級(jí)緩存,但只有(沒(méi)打開(kāi)查詢緩存時(shí))Se

21、ssion的iterator,get,load會(huì)從二級(jí)緩存中取數(shù)據(jù)(iterator可能存在N+1次查詢)。Query,Criteria(查詢緩存)由于命中率較低,所以hibernate缺省是關(guān)閉;修改cache.use_query_cache為true打開(kāi)對(duì)查詢的緩存,并且調(diào)用query.setCacheable(true)或criteria.setCacheable(true)。SessionFactory中提供了evictXXX()方法用來(lái)清除緩存中的內(nèi)容。統(tǒng)計(jì)信息打開(kāi)generate_statistics,用sessionFactory.getSatistics()獲取統(tǒng)計(jì)信息。 IT

22、資訊交流網(wǎng) WWW.IT315.ORG緩存分布式緩存和中央緩存。使用緩存的條件1.讀取大于修改。2.數(shù)據(jù)量不能超過(guò)內(nèi)存容量。3.對(duì)數(shù)據(jù)要有獨(dú)享的控制。4.可以容忍出現(xiàn)無(wú)效數(shù)據(jù)。IT資訊交流網(wǎng) WWW.IT315.ORG事務(wù)JDBCTransaction 單個(gè)數(shù)據(jù)庫(kù)(一個(gè)SesisonFactory對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)),由JDBC實(shí)現(xiàn)。Session session = null;Transaction tx =null;try session = sessionFactory.openSession();tx = session.beginTransaction();/processmit();

23、catch(HibernateException e)if(tx != null)tx.rollback();throw e;finally if (session != null)session.close();connection.setAutoCommit(false);mit();conn.rollback();IT資訊交流網(wǎng) WWW.IT315.ORG事務(wù)JTATransaction可以簡(jiǎn)單的理解成跨數(shù)據(jù)庫(kù)的事物,由應(yīng)用JTA 容器實(shí)現(xiàn);使用JTATransaction需要配置hibernate.transaction.factory_class參數(shù),該參數(shù)缺省值是org.hiber

24、nate.transaction. JDBCTransactionFactory,當(dāng)使用JTATransaction時(shí)需要將該參數(shù)改成org.hibernate.transaction.JTATransactionFactory,并配置jta.UserTransaction參數(shù)JNDI名(Hibernate在啟動(dòng)JTATransaction時(shí)要用該值到JNDI的上下文Context中去找javax.transaction.UserTransaction)。javax.transaction.UserTransactin tx = context.lookup(“jndiName”);trytx

25、.begin();/多個(gè)數(shù)據(jù)庫(kù)的session操作;/session1./session2.mit();catch(Exception e)tx.rollback(); throw e;IT資訊交流網(wǎng) WWW.IT315.ORG事務(wù)session context和事務(wù)邊界用current_session_context_class屬性來(lái)定義context(用sessionFactory.getCurrentSession()來(lái)獲得session),其值為:1.thread:ThreadLocal來(lái)管理Session實(shí)現(xiàn)多個(gè)操作共享一個(gè)Session,避免反復(fù)獲取Session,并控制事務(wù)邊界,

26、此時(shí)session不能調(diào)用close當(dāng)commit或rollback的時(shí)候session會(huì)自動(dòng)關(guān)閉(connection.release_mode:after_transaction)。Open session in view:在生成(渲染)頁(yè)面時(shí)保持session打開(kāi)。2.jta:由JTA事務(wù)管理器來(lái)管理事務(wù)(connection.release_mode:after_statement)。悲觀鎖和樂(lè)觀鎖悲觀鎖由數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn);樂(lè)觀鎖hibernate用version和timestamp來(lái)實(shí)現(xiàn) IT資訊交流網(wǎng) WWW.IT315.ORG其他問(wèn)題hibernate.cfg.xml和hbm.xml

27、內(nèi)容解釋數(shù)據(jù)類型 1. type可以是hibernate、java類型或者你自己的類型(需要實(shí)現(xiàn)hibernate的一個(gè)接口)。2.基本類型一般不需要在映射文件(hbm.xml)中說(shuō)明,只有在一個(gè)JAVA類型和多個(gè)數(shù)據(jù)庫(kù)數(shù)據(jù)類型相對(duì)應(yīng)時(shí)并且你想要的和hibernate缺省映射不一致時(shí),需要在映射文件中指明類型(如:java.util.Date,數(shù)據(jù)庫(kù)DATE,TIME,DATATIME,TIMESTAMP,hibernate缺省會(huì)把java.util.Date映射成DATATIME型,而如果你想映射成TIME,則你必須在映射文件中指定類型)。3.數(shù)據(jù)類型的對(duì)應(yīng)關(guān)系見(jiàn)參考文檔5.2.2 Sess

28、ion是非線程安全的,生命周期較短,代表一個(gè)和數(shù)據(jù)庫(kù)的連接,在B/S系統(tǒng)中一般不會(huì)超過(guò)一個(gè)請(qǐng)求;內(nèi)部維護(hù)一級(jí)緩存和數(shù)據(jù)庫(kù)連接,如果session長(zhǎng)時(shí)間打開(kāi),會(huì)長(zhǎng)時(shí)間占用內(nèi)存和數(shù)據(jù)庫(kù)連接。SessionFactory是線程安全的,一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)SessionFactory,生命周期長(zhǎng),一般在整個(gè)系統(tǒng)生命周期內(nèi)有效;SessionFactory保存著和數(shù)據(jù)庫(kù)連接的相關(guān)信息(user,password,url)和映射信息,以及Hibernate運(yùn)行時(shí)要用到的一些信息。IT資訊交流網(wǎng) WWW.IT315.ORG其他問(wèn)題flush時(shí)將一級(jí)緩存與數(shù)據(jù)庫(kù)同步大批處理 大量操作數(shù)據(jù)時(shí)可能造成內(nèi)存溢出,解決

29、辦法如下:1.清除session中的數(shù)據(jù)for(int i=0;i100000;i+)session.save(obj);for(int i=0;i100000;i+)session.save(obj);if(i% 50 = 0)session.flush();session.clear();2.用StatelessSession接口:它不和一級(jí)緩存、二級(jí)緩存交互,也不觸發(fā)任何事件、監(jiān)聽(tīng)器、攔截器,通過(guò)該接口的操作會(huì)立刻發(fā)送給數(shù)據(jù)庫(kù),與JDBC的功能一樣。StatelessSession s = sessionFactory.openStatelessSession();該接口的方法與Sess

30、ion類似。3.Query.executeUpdate()執(zhí)行批量更新,會(huì)清除相關(guān)聯(lián)的類二級(jí)緩存(sessionFactory.evict(class),也可能會(huì)造成級(jí)聯(lián),和樂(lè)觀鎖定出現(xiàn)問(wèn)題IT資訊交流網(wǎng) WWW.IT315.ORG其他問(wèn)題HQL1查詢多個(gè)對(duì)象select art, user from Article art, User user where art.author.id=user.id and art.id=:id這種方式返回的是Object,Object0:article,Object1:user。2分頁(yè)query.setFirstResult,query.setMaxRes

31、ults. 查詢記錄總數(shù)query.iterate(“select count(*) from Person”).next()3批量更新query.executeUpdate()可能造成二級(jí)緩存有實(shí)效數(shù)據(jù)。Criteria1排序Criteria.addOrder(Order.desc(propertyName);2關(guān)聯(lián)查詢criteria.setFetchMode(“propertyName”, FetchMode.SELECT)與映射文件中關(guān)聯(lián)關(guān)系的fetch作用一致。3投影Projections.rowCount(),max(propertyName), avg, groupProperty4分頁(yè)P(yáng)rojections.rowCount(),criteria.setFirstResult(),criteria.setMaxResults()5DetachedCriteria可在session外創(chuàng)建(在其他層創(chuàng)建比如在Service中創(chuàng)建)然后用getExecutableCriteria(session)方法創(chuàng)建Criteria對(duì)象來(lái)完成查詢。6Example查詢,Example.create(obj);criteria.add(examp

溫馨提示

  • 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)論