第10章Java持久化API(JPA)ppt課件_第1頁(yè)
第10章Java持久化API(JPA)ppt課件_第2頁(yè)
第10章Java持久化API(JPA)ppt課件_第3頁(yè)
第10章Java持久化API(JPA)ppt課件_第4頁(yè)
第10章Java持久化API(JPA)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩64頁(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、經(jīng)典Java EE課程段鵬松第10章 Java耐久化APIJPA了解ORM的根本概念了解實(shí)體的根本概念掌握實(shí)體的根本映射掌握實(shí)體的關(guān)聯(lián)關(guān)系映射掌握實(shí)體的生命周期規(guī)律課程目的概述J2EE時(shí)代,運(yùn)用Entity Bean規(guī)范來(lái)處理運(yùn)用程序的耐久化問(wèn)題;Java EE5規(guī)范運(yùn)用JPA作為耐久化處理方案;Sun公司的JPA以Entity為中心,它將實(shí)體映射究竟層數(shù)據(jù)表,然后經(jīng)過(guò)在運(yùn)用程序中運(yùn)用EntityManager來(lái)操作Entity,而JPA實(shí)現(xiàn)那么會(huì)將這種操作轉(zhuǎn)換為對(duì)底層數(shù)據(jù)表的操作。JPA只是一種規(guī)范,其本身并不提供實(shí)現(xiàn),開(kāi)發(fā)者需指定JPA的實(shí)現(xiàn)。目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)

2、聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)用籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)實(shí)體的生命周期和監(jiān)聽(tīng)器ORM的概念ORM:Object /Relation Mapping,對(duì)象關(guān)系映射。ORM的根本思想:完成面向?qū)ο蟮木幊萄哉Z(yǔ)到關(guān)系數(shù)據(jù)庫(kù)的映射普通是雙向的。ORM出現(xiàn)的緣由:處理面向?qū)ο缶幊萄哉Z(yǔ)和關(guān)系型數(shù)據(jù)庫(kù)操作時(shí)的不匹配問(wèn)題。ORM的未來(lái):隨著面向?qū)ο髷?shù)據(jù)庫(kù)的出現(xiàn),ORM工具會(huì)自動(dòng)消亡,但短期內(nèi)不會(huì)。ORM的概念JPA概述JPA實(shí)現(xiàn)作用:把對(duì)實(shí)體的操作,轉(zhuǎn)換成對(duì)數(shù)據(jù)庫(kù)的操作。JPA規(guī)范本質(zhì)上就是一種ORM規(guī)范。但JPA并未提供ORM實(shí)現(xiàn),它只是指定了一些規(guī)范,提供了一些編程的API,詳細(xì)實(shí)現(xiàn)由運(yùn)用效力器廠商來(lái)提供。JPA概述

3、數(shù)據(jù)庫(kù)HibernateTopLink其他ORM框架.運(yùn)用程序JPA規(guī)范JPA實(shí)現(xiàn)JPA的映射規(guī)那么數(shù)據(jù)表映射實(shí)體類(lèi)把表構(gòu)造映射為實(shí)體類(lèi)類(lèi)型數(shù)據(jù)表的行映射實(shí)體類(lèi)對(duì)象把數(shù)據(jù)表的行記錄映射到實(shí)體對(duì)象數(shù)據(jù)表的列映射實(shí)體的屬性字段映射為實(shí)體類(lèi)的屬性JPA規(guī)范簡(jiǎn)介JPA并不屬于EJB3的范疇,它是一套完全獨(dú)立的規(guī)范。JPA不僅可以在Java EE中運(yùn)用,也可以在Java SE中運(yùn)用。JPA的常用組件:實(shí)體EntityManager類(lèi)似Hibernate中的sessionJPQL類(lèi)似HQL目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)用籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)實(shí)體的生命周期和監(jiān)聽(tīng)器開(kāi)發(fā)

4、實(shí)體JPA管理的實(shí)體類(lèi)就是一個(gè)POJO類(lèi),再在實(shí)體類(lèi)上添加一些Annotation。Annotation定義了POJO類(lèi)和底層數(shù)據(jù)表之間的映射關(guān)系。+=POJOannotationEntityJPA的實(shí)現(xiàn)目前主流的JPA實(shí)現(xiàn)有如下幾種:Hibernate JPA實(shí)現(xiàn)TopLink JPA實(shí)現(xiàn)OpenJPA實(shí)現(xiàn)不同的JPA實(shí)現(xiàn)主要經(jīng)過(guò)persistence.xml文件的配置信息來(lái)區(qū)分在Java SE環(huán)境下運(yùn)用Hibernate JPA實(shí)現(xiàn)為了在Java SE運(yùn)用程序中運(yùn)用Hibernate JPA實(shí)現(xiàn),必需先下載和安裝Hibernate JPA實(shí)現(xiàn)。實(shí)踐操作演示在Java SE環(huán)境下運(yùn)用TopL

5、ink JPA實(shí)現(xiàn)Java EE5、GlassFish運(yùn)用效力器都曾經(jīng)內(nèi)置了TopLink JPA實(shí)現(xiàn)。實(shí)踐操作演示在Java SE環(huán)境下運(yùn)用EntityManager運(yùn)用EntityManager的情形:在EJB中運(yùn)用EntityManager在Servlet、JSF的托管Bean中運(yùn)用EntityManager在Java SE運(yùn)用中運(yùn)用EntityManager在Java SE環(huán)境下運(yùn)用EntityManager創(chuàng)建EntityManager的步驟:運(yùn)用javax.persistence.Persistence工廠類(lèi)提供的靜態(tài)方法createEntityManagerFactory()運(yùn)用

6、EntityManagerFactory的createEntityManager()或createEntityManager(Map map)實(shí)踐操作演示運(yùn)轉(zhuǎn)結(jié)果Hibernate和JPA的關(guān)系JPA是一個(gè)規(guī)范,Hibernate是對(duì)JPA規(guī)范的一種實(shí)現(xiàn);JPA也可以用其他的實(shí)現(xiàn),如TopLink等Hibernate也有本人的實(shí)現(xiàn)類(lèi)。JPA出現(xiàn)緣由簡(jiǎn)化現(xiàn)有Java EE和Java SE運(yùn)用的對(duì)象耐久化的開(kāi)發(fā)任務(wù)Sun希望整合對(duì)ORM技術(shù),實(shí)現(xiàn)耐久化領(lǐng)域的一致EntityManager的方法persist():保管實(shí)體到數(shù)據(jù)庫(kù)merger():合并實(shí)體remove():刪除實(shí)體find(.):查

7、找實(shí)體flush():同步數(shù)據(jù)庫(kù)refresh():刷新實(shí)體others. JAP的配置方式JPA的配置方式anntotationxml引薦運(yùn)用annotation實(shí)踐操作演示目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)用籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)實(shí)體的生命周期和監(jiān)聽(tīng)器耐久化上下文和耐久化單元耐久化上下文是一組處于托管形狀下實(shí)體所組成的集合,它處于EntityManager的管理之下。運(yùn)用程序可以經(jīng)過(guò)EntityManager與耐久化上下文交互。耐久化單元由persistence.xml文件定義,運(yùn)用標(biāo)簽定義。不論任何類(lèi)型的運(yùn)用程序(Java SE、EJB、WAR等),pe

8、risistence.xml文件都應(yīng)該放在META-INF文件夾下面。實(shí)體類(lèi)的要求提供一個(gè)無(wú)參數(shù)的構(gòu)造器提供一個(gè)標(biāo)識(shí)屬性為實(shí)體類(lèi)的每個(gè)屬性提供setter和getter方法運(yùn)用非final的類(lèi)重寫(xiě)equals()和hashCode()方法實(shí)體的形狀新建(new)在new操作之后托管(managed)被EntityManager所管理,和數(shù)據(jù)庫(kù)操作同步脫管(detached)與之管理的EntityManager封鎖,斷開(kāi)和數(shù)據(jù)庫(kù)的銜接被刪除(removed)調(diào)用EntityManager的remove()方法之后實(shí)體的形狀新建托管脫管被刪除終了開(kāi)場(chǎng)new渣滓回收remove()渣滓回收persi

9、st()close()clear()find()getReference()管理實(shí)體的方法耐久化實(shí)體運(yùn)用persist()方法根據(jù)逐漸加載實(shí)體運(yùn)用find()方法更新實(shí)體運(yùn)用實(shí)體類(lèi)的setXXX()方法在提交事務(wù)之前實(shí)踐操作演示管理實(shí)體的方法合并實(shí)體運(yùn)用merge()方法刪除實(shí)體運(yùn)用remove()方法刷新實(shí)體運(yùn)用refresh()方法實(shí)踐操作演示目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)用籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)實(shí)體的生命周期和監(jiān)聽(tīng)器映射實(shí)體類(lèi)對(duì)于各JPA實(shí)體類(lèi)而言,通??梢圆捎萌缦聝蓚€(gè)annotation來(lái)修飾它EntityTablecatalognameschem

10、auniqueConstraint映射實(shí)體類(lèi)的屬性Column:映射屬性到數(shù)據(jù)庫(kù),其支持的屬性有:inertbalelengthnamenullabletableuniqueupdatableTransient:該屬性不會(huì)映射到數(shù)據(jù)庫(kù)實(shí)踐操作演示映射實(shí)體類(lèi)的屬性Enumerated:映射枚舉類(lèi)型的屬性EnumTypeSTRING:值ORDINAL:編號(hào)Lob:修飾大數(shù)據(jù)類(lèi)型Basic:可以指定延遲加載fetchoptional實(shí)踐操作演示映射實(shí)體類(lèi)的屬性Temporal:修飾日期類(lèi)型的屬性TemporalTypeDATETIMETIMESTAMP實(shí)踐操作演示將實(shí)體映射到多個(gè)表假設(shè)一個(gè)實(shí)體的屬性

11、較多,可以把這個(gè)實(shí)體映射到多個(gè)數(shù)據(jù)庫(kù)表中。TableSecondaryTableSecondaryTables實(shí)踐操作演示映射復(fù)合類(lèi)型的屬性Embedded:映射復(fù)合類(lèi)型屬性Embeddable:修飾作為復(fù)合類(lèi)型的自定義類(lèi)實(shí)踐操作演示映射實(shí)體類(lèi)的主鍵數(shù)據(jù)庫(kù)的主鍵普通設(shè)置為自增長(zhǎng)的,可以是數(shù)字類(lèi)型,也可以是字符類(lèi)型,或者是復(fù)合類(lèi)型。JPA中的單一主鍵運(yùn)用Id修飾。Id的屬性有:strategygeneratorJPA的復(fù)合主鍵運(yùn)用IdClass和多個(gè)Id等來(lái)修飾。實(shí)踐操作演示目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)用籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)實(shí)體的生命周期和監(jiān)聽(tīng)器關(guān)聯(lián)關(guān)系

12、概述關(guān)聯(lián)關(guān)系的概念:實(shí)例之間的相互關(guān)聯(lián)關(guān)聯(lián)關(guān)系的分類(lèi)單向關(guān)聯(lián)單向1-1,單向1-N,單向N-1,單向N-N雙向關(guān)聯(lián)雙向1-1,雙向1-N,雙向N-N單向N-1關(guān)聯(lián)只能從N的一端訪問(wèn)1的一端經(jīng)過(guò)在N的一端援用1的一端來(lái)實(shí)現(xiàn)需求在N的一端定義1的一端的setter和getter運(yùn)用的annotation:ManyToOnecascade,fetch,optional,targetEntityJoinColumncolumnDefinition,name等實(shí)踐操作演示單向1-1關(guān)聯(lián)只能從1的一端訪問(wèn)另一端的1經(jīng)過(guò)在1的一端援用1的一端來(lái)實(shí)現(xiàn)需求在1的一端定義1的另一端的setter和getter運(yùn)用

13、的annotation:OneToOnecascade,fetch,mappedBy,optional,targetEntityJoinColumncolumnDefinition,name等實(shí)踐操作演示單向1-N關(guān)聯(lián)只能從1的一端訪問(wèn)N的一端經(jīng)過(guò)在1的一端援用N端來(lái)實(shí)現(xiàn)需求在1的一端定義N端的setter和getterN端在1端以通常以Set類(lèi)型出現(xiàn)運(yùn)用的annotation:OneToManycascade,fetch,mappedBy,optional,targetEntityJoinColumncolumnDefinition,name等實(shí)踐操作演示單向N-N關(guān)聯(lián)只能從N的一端訪問(wèn)另一

14、端的N需求在N的一端定義N的另一端的setter和getter控制端需求添加一個(gè)Set集合屬性,該Set集合記錄了當(dāng)前實(shí)體的一切關(guān)聯(lián)實(shí)體運(yùn)用的annotation:ManyToManycascade,fetch,mappedBy,targetEntityJoinTablename,catalog,schema等實(shí)踐操作演示雙向1-1關(guān)聯(lián)可以從恣意端訪問(wèn)對(duì)端需求讓兩端都添加對(duì)方的援用需求讓兩端都定義對(duì)端的setter和getter底層數(shù)據(jù)庫(kù)可以在恣意一端添加外鍵運(yùn)用的annotation:OneToOnecascade,fetch,targetEntityJoinColumnname,nulla

15、ble,schema等實(shí)踐操作演示雙向1-N關(guān)聯(lián)可以從恣意端訪問(wèn)對(duì)端需求讓兩端都添加對(duì)方的援用需求讓兩端都定義對(duì)端的setter和getter實(shí)踐工程中盡量運(yùn)用雙向1-N運(yùn)用的annotation:OneToMany(1端)ManyToOne(N端)JoinColumn(N端)實(shí)踐操作演示雙向N-N關(guān)聯(lián)可以從恣意端訪問(wèn)對(duì)端需求讓兩端都添加對(duì)方的援用需求讓兩端都定義對(duì)端的setter和getter實(shí)踐工程中盡量防止運(yùn)用雙向N-N運(yùn)用的annotation:ManyToManycascade,fetch,targetEntityJoinTablename,nullable,schema等實(shí)踐操作演

16、示運(yùn)用Map集合記錄關(guān)聯(lián)實(shí)體JPA允許運(yùn)用Map集合來(lái)記錄關(guān)聯(lián)實(shí)體。當(dāng)運(yùn)用Map集合來(lái)記錄關(guān)聯(lián)實(shí)體時(shí),Map集合的Key類(lèi)型通常是 關(guān)聯(lián)實(shí)體的主鍵類(lèi)型。運(yùn)用的annotation:OneToManyMapKey實(shí)踐操作演示對(duì)關(guān)聯(lián)實(shí)體進(jìn)展排序運(yùn)用的annotation:OrderBy指定排序規(guī)那么例如:OrderBy(“屬性名 ASC)通常和OneToMany,ManytoMany結(jié)合運(yùn)用實(shí)踐操作演示目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)用籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)實(shí)體的生命周期和監(jiān)聽(tīng)器概述對(duì)于面向?qū)ο蟮木幊萄哉Z(yǔ)而言,承繼和多態(tài)是兩個(gè)最根本的概念。JPA支持多種承繼映射

17、戰(zhàn)略,不論哪種承繼映射戰(zhàn)略,JPA的多態(tài)查詢都可以運(yùn)轉(zhuǎn)良好。對(duì)于類(lèi)與類(lèi)之間的承繼關(guān)系,JPA提供了3中映射戰(zhàn)略:整個(gè)類(lèi)層次對(duì)應(yīng)一張表銜接子類(lèi)的映射戰(zhàn)略每個(gè)詳細(xì)類(lèi)對(duì)應(yīng)一張表JPA映射戰(zhàn)略概述運(yùn)用的Annotation:Inheritance不同的戰(zhàn)略JOINED:承繼的子類(lèi)各自生成一張表SINGLE_TABLE:只生成一張表,用一個(gè)字段當(dāng)鑒別器默許TABLE_PER_CLASS:每個(gè)類(lèi)都消費(fèi)一張表,包括基類(lèi)整個(gè)類(lèi)層次對(duì)應(yīng)一張表的映射戰(zhàn)略是JPA承繼映射默許的映射戰(zhàn)略。這種映射戰(zhàn)略下,一切的實(shí)體都映射到一張表中,經(jīng)過(guò)區(qū)分者(discriminator)列來(lái)區(qū)分不同的實(shí)體。運(yùn)用的Annotation

18、:DiscriminatorColumnDiscriminatorValue會(huì)呵斥數(shù)據(jù)冗余,實(shí)踐中盡量防止。實(shí)踐操作演示DiscriminatorColumn引見(jiàn)DiscriminatorColumn定義在運(yùn)用SINGLE_TABLE或JOINED承繼戰(zhàn)略的表中區(qū)別不承繼層次的列。 name:column的名字。默許值為T(mén)YPE。 columnDefinition:生成DDL的sql片斷。 length:String類(lèi)型的column的長(zhǎng)度,其他類(lèi)型運(yùn)用默許值10。下面的代碼定義了一個(gè)列名為DISC,長(zhǎng)度為20的String類(lèi)型的區(qū)別列。 Entity Table(name=CUST) Inh

19、eritance(strategy=SINGLE_TABLE,discriminatorType=STRING, scriminatorValue=CUSTOMER) DiscriminatorColumn(name=DISC,length=20) publicclassCustomer.銜接子表的映射戰(zhàn)略子類(lèi)實(shí)體由父類(lèi)表和子類(lèi)表共同存儲(chǔ),將子類(lèi)和父類(lèi)共有的屬性在父類(lèi)表中存儲(chǔ),而子類(lèi)添加的屬性那么保管在子類(lèi)表中。會(huì)有共有主鍵存在。運(yùn)用的Annotation:Inheritance必需指定strategy屬性實(shí)踐操作演示每個(gè)詳細(xì)類(lèi)對(duì)應(yīng)一張表的映射戰(zhàn)略父類(lèi)的屬性保管在父類(lèi)表中,子類(lèi)的屬性保管在子類(lèi)

20、表中。但從數(shù)據(jù)庫(kù)方面,難以看出承繼關(guān)系。不能運(yùn)用主鍵自增戰(zhàn)略運(yùn)用的Annotation:Inheritance必需指定strategy屬性實(shí)踐操作演示目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)用籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)實(shí)體的生命周期和監(jiān)聽(tīng)器概述除了常規(guī)實(shí)體之間的承繼關(guān)系外,JPA還有一些特殊用法:JPA的實(shí)體不僅可以是詳細(xì)類(lèi),也可以是籠統(tǒng)類(lèi);JPA的實(shí)體可以承繼非實(shí)體,這個(gè)父類(lèi)被稱為非實(shí)體父類(lèi)。本節(jié)將詳細(xì)引見(jiàn)這兩種特殊用法。籠統(tǒng)實(shí)體運(yùn)用Entity修飾籠統(tǒng)類(lèi),該籠統(tǒng)類(lèi)就稱為籠統(tǒng)實(shí)體;籠統(tǒng)實(shí)體和詳細(xì)實(shí)體的獨(dú)一區(qū)別:籠統(tǒng)實(shí)體的實(shí)現(xiàn)類(lèi)是籠統(tǒng)類(lèi),因此程序無(wú)法直接創(chuàng)建籠統(tǒng)實(shí)體的實(shí)

21、例。對(duì)籠統(tǒng)實(shí)體的查詢操作,會(huì)轉(zhuǎn)換為該籠統(tǒng)實(shí)體子類(lèi)的相應(yīng)查詢操作,是一種典型的多態(tài)操作。實(shí)踐操作演示非實(shí)體父類(lèi)JPA實(shí)體的父類(lèi)既可以是實(shí)體,也可以是非實(shí)體。非實(shí)體父類(lèi)既可以是詳細(xì)類(lèi),也可以是籠統(tǒng)類(lèi)。運(yùn)用MappedSuperclass修飾非實(shí)體父類(lèi)。實(shí)踐操作演示非實(shí)體父類(lèi)的特點(diǎn)非實(shí)體父類(lèi)在底層數(shù)據(jù)庫(kù)中并沒(méi)有對(duì)應(yīng)的數(shù)據(jù)表。非實(shí)體父類(lèi)不能運(yùn)用EntityManager執(zhí)行保管、更新和查詢。非實(shí)體父類(lèi)不能運(yùn)用Query執(zhí)行查詢。籠統(tǒng)實(shí)體和非實(shí)體父類(lèi)的區(qū)別:籠統(tǒng)實(shí)領(lǐng)會(huì)生成數(shù)據(jù)庫(kù)表,非實(shí)體父類(lèi)不會(huì)重定義非實(shí)體子類(lèi)的外鍵列對(duì)于非實(shí)體父類(lèi),假設(shè)和其他實(shí)體之間存在關(guān)聯(lián)關(guān)系,那它的一切子類(lèi)都能夠需求添加額外的外鍵列,這樣才干記錄它的一切子類(lèi)實(shí)體和關(guān)聯(lián)實(shí)體之間的關(guān)聯(lián)關(guān)系。默許情況下,外鍵列的稱號(hào)都是一樣的,假想象修正可以運(yùn)用以下annotation:AssociationOverrideAssociationOverrides實(shí)踐操作演示目 錄實(shí)體引見(jiàn)實(shí)體入門(mén)了解實(shí)體實(shí)體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運(yùn)

溫馨提示

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