SSH框架項目教程課件第3章第一講_第1頁
SSH框架項目教程課件第3章第一講_第2頁
SSH框架項目教程課件第3章第一講_第3頁
SSH框架項目教程課件第3章第一講_第4頁
SSH框架項目教程課件第3章第一講_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

重慶正大軟件學院軟件系《MVC框架程序設計》電子教案重慶正大軟件學院軟件系《MVC框架程序設計》課程組重慶正大軟件職業(yè)技術學院教案(項目類)授課對象系別軟件系本次課學時4學時年級班次大二章節(jié)題目第4章搭建hibernate框架目的要求(含技能要求)了解orm概念,作用了解hibernate概念,作用掌握hibernate數(shù)據(jù)庫基本配置掌握hibernate對象映射配置本節(jié)重點掌握hibernate數(shù)據(jù)庫基本配置掌握hibernate對象映射配置本節(jié)難點了解orm概念,作用了解hibernate概念,作用教學方法項目教學法教學用具機房、屏幕廣播問題引入通過用戶注冊數(shù)據(jù)入庫案例,從而引出本次課程。難點與重點講解方法引導、分析、講解、實作演示本次課小結課程小結教后禮記討論、思考題、作業(yè)(含實訓作業(yè))完成本次課的課堂任務填寫實驗報告任務介紹(5分鐘)根據(jù)注冊信息在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)庫及用戶信息表,使用hibernate框架實現(xiàn)注冊信息入庫。任務解析(50-60分鐘)加入hibernate相關jar包(只需加一次)【可選】創(chuàng)建注冊用戶表結構創(chuàng)建實體類與表的映射文件配置hibernate全局配置文件dao層:增加注冊入庫數(shù)據(jù)處理類service層:增加注冊業(yè)務處理類action層,修改注冊業(yè)務控制類調(diào)試運行詳細步驟在使用struts2的web項目里引入所需hibernate相關的jar文件hibernate相關jar文件只需要引入一次,具體要引入的jar文件詳見本節(jié)任務解析的例子3.1-1的相關內(nèi)容?!究蛇x】創(chuàng)建注冊用戶表結構創(chuàng)建用戶表user,表結構如表3.1-2所示。表3.1-2用戶信息表user字段編號英文字段名中文描述字段類型備注id流水號int自增、pk、notnullname會員登錄名varchar(50)notnulluserName真實姓名varchar(50)password用戶密碼varchar(20)notnullsex性別varchar(2)notnullprovince省份varchar(20)age年齡intbirth生日datemobile手機varchar(20)email電子郵箱varchar(50)hobbies愛好varchar(255)注:若已經(jīng)編寫好user表對應的實體類和實體映射文件,以及在hibernate全局配置文件的<session-factory>節(jié)點中增加了<propertyname="hbm2ddl.auto">create</property>,那么可以通過hibernate框架在運行程序的時候自動在數(shù)據(jù)庫中生成user表結構。特別提醒,若user表已經(jīng)存在,則會刪除舊的user表,重新創(chuàng)建新的,會導致舊表中記錄全部丟失,所以一般建議該配置僅使用一次,在使用之后可以將<propertyname="hbm2ddl.auto">create</property>中的create替換成update就可以避免這個問題。創(chuàng)建實體類與映射文件在工程src目錄下的com.zdsoft.domain包中新增與user表對應的實體類User,參考如下:publicclassUser{ intid; Stringname; StringuserName; Stringpassword; Stringsex; Stringprovince; intage; Datebirth; Stringmobile; Stringhobbies; Stringemail; //以下省略每個成員變量的get/set方法}在com.zdsoft.domain包下新增User.hbm.xml映射文件,具體步驟如下:首先在User.hbm.xml映射文件中加入文件頭,代碼如下(一般是固定的,無需改動):<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC "-//Hibernate/HibernateMappingDTD3.0//EN" "/hibernate-mapping-3.0.dtd">其次在User.hbm.xml文件的文件頭下面添加hibernate-mapping節(jié)點,關鍵代碼如下:<hibernate-mapping package="com.zdsoft.domain"></hibernate-mapping>package屬性表示所描述的實體類的路徑,本任務的實體類都在com.zdsoft.domain包下,所以做如此配置。接著在hibernate-maaping節(jié)點下添加class節(jié)點,關鍵代碼如下:<classname="User"> </class>class節(jié)點的name屬性表示映射類的類名稱。再次,在class節(jié)點下添加相關子節(jié)點,參考代碼如下:<idname="id"> <generatorclass="native"/> </id> <propertyname="name"/> <propertyname="password"/> <propertyname="userName"/> <propertyname="sex"/> <propertyname="province"/> <propertyname="age"/> <propertyname="birth"/> <propertyname="mobile"/> <propertyname="email"/> <propertyname="hobbies"/>注:id節(jié)點表示所描述類的標識符,其中name屬性表示標識符的名稱,column屬性表示該標識符對應數(shù)據(jù)庫表中的列名稱,若映射類中的屬性與表中的字段名完全一樣,則column屬性可以省略。配置hibernate全局配置文件在hibernate.cfg.xml文件的<session-factory>節(jié)點中增加一行代碼,參考如下:(其實就是讓hibernate框架知道并管理我們增加的一個新的實體-關系映射)<mappingresource="com/zdsoft/domain/User.hbm.xml"/>dao層:增加注冊入庫數(shù)據(jù)處理類在com.zdsoft.dao包下新增RegisterDao,該類編寫的詳細步驟如下:首先在RegisterDao類中定義hibernate框架所使用的成員變量,參考如下:Configurationcfg=null;SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;其次定義RegisterDao類的構造方法,參考如下:publicRegisterDao(){ cfg=newConfiguration(); cfg.configure(); sessionFactory=cfg.buildSessionFactory();}再定義保存User對象的save方法,并實現(xiàn)該方法: publicbooleansave(Useruser){ booleanret=false; try{ session=sessionFactory.openSession(); tx=session.beginTransaction(); session.save(user); mit(); ret=true; }catch(HibernateExceptione){ if(tx!=null){ tx.rollback(); } e.printStackTrace(); ret=false; } if(session!=null){ session.close(); } returnret; }service層:增加注冊業(yè)務處理類在com.zdsoft.service包下新增RegisterService類,該類創(chuàng)建詳細步驟如下:首先在RegisterService類中定義成員變量RegisterDao:privateRegisterDaoregisterDao=newRegisterDao();再在RegisterService類中定義register方法: publicbooleanregister(Useruser){ returnregisterDao.save(user); }action層:修改注冊業(yè)務控制類修改com.zdsoft.action包中的RegisterAction類(RegisterAction的初始代碼請參考前面章節(jié)),調(diào)用相應的業(yè)務邏輯層方法,關鍵代碼如下: publicStringregist(){ //業(yè)務控制器 //調(diào)用業(yè)務處理類完成業(yè)務處理,并得到業(yè)務處理的結果,在調(diào)用的時候需要傳數(shù)據(jù) RegisterServiceregisterService=newRegisterService(); //數(shù)據(jù)準備:數(shù)據(jù)復制給實體類的對象user Useruser=newUser(); user.setName(name); user.setUserName(username); user.setPassword(pass); user.setSex(sex); user.setProvince(province); user.setAge(age); user.setBirth(birth); user.setMobile(mobile); user.setEmail(email); Stringtmp=""; if(love!=null){ for(Stringlo:love){ tmp+=lo+""; } } user.setHobbies(tmp); //調(diào)用業(yè)務處理類相關方法執(zhí)行后得到結果 booleanret=registerService.register(user); //根據(jù)結果返回 if(ret){ return"success"; }else{ return"error"; } }調(diào)試運行將項目發(fā)布到web服務器中運行注冊頁面,輸入注冊信息如圖3.1-3a所示,點擊提交后跳轉(zhuǎn)到成功頁面如圖3.1-3b所示,在控制臺中我們看到輸出的sql語句如圖3.1-4所示,在數(shù)據(jù)庫中我們看到插入的注冊信息如圖3.1-5所示(注冊失敗的情況可參考登錄功能章節(jié)的處理,這里從略)。圖3.1-3a注冊用戶輸入頁面圖3.1-3b注冊成功結果頁面圖3.1-4hibernate后臺HQL語句圖3.1-5數(shù)據(jù)庫user表結果根據(jù)任務提出問題(45-55分鐘)Hibernate框架是什么?如何使用hibernate框架?問題解析(45-55分鐘)Hibernate框架是什么Hibernate是一個開放源代碼的O/RMapping(對象關系映射框架),它對JDBC進行了輕量級的對象封裝,使Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。術語ORM——對象關系映射(ObjectRelationalMapping,簡稱ORM)是一種為了解決面向?qū)ο笈c關系數(shù)據(jù)庫存在的互不匹配現(xiàn)象的技術。簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將java程序中的對象自動持久化到關系數(shù)據(jù)庫中。本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。Hibernate框架的好處:操縱數(shù)據(jù)庫的時候省略了連接、關閉數(shù)據(jù)庫等例行的操作。程序使用面向?qū)ο蟮膉ava代碼及hsql取代了操縱數(shù)據(jù)庫以前必須的sql語句,這樣,不依賴sql語句的程序可以數(shù)據(jù)庫無關;即:程序員不需要知道sql語句,當程序更換了不同廠家的類型的數(shù)據(jù)庫時,使用hibernate框架可以不用修改代碼依然可用。Hibernate框架的用武之地——使用層次關系如圖3.1-1所示。圖3.1-1Hibernate框架的作用層次hibernate框架的使用說明:以用戶信息維護為例【例子3.1-1】使用hibernate框架實現(xiàn)用戶信息的增刪查改,用戶信息(userinfo)在數(shù)據(jù)庫中的表結構如表3.1-1所示。表3.1-1用戶信息表userinfo字段序號中文描述英文字段名字段類型備注用戶iduseridvarchar(20)pk、notnull用戶名稱usernamevarchar(50)notnull備注:請先將表userinfo在數(shù)據(jù)庫中建好,數(shù)據(jù)庫不限,建議使用mysql,本例使用mysql數(shù)據(jù)庫。步驟1:加入hibernate的jar包到工程中(hibernate所需JAR如下)。hibernate核心安裝包(hibernate-distribution-3.3.1.GA-dist.zip)下載路徑http:,點擊HibernateCore右邊的Downloads,下載以下文件:hibernate3.jarlib\bytecode\cglib\hibernate-cglib-repack-2.1_3.jarlib\required\*.jarhibernate注解安裝包(hibernate-annotations-3.4.0.GA.zip)下載路徑http:,點擊HibernateAnnotations右邊的downloads,下載以下文件:hibernate-annotations.jarlib\ejb3-persistence.jarhibernate-commons-annotations.jarHibernate針對JPA的實現(xiàn)包(hibernate-entitymanager-3.4.0.GA.zip)下載路徑,點擊HibernateEntitymanager右邊的Downloads,下載以下文件:hibernate-entitymanager.jarlib\test\log4j.jarslf4j-log4j12.jar注:本書用的是hibernate框架3.2及以上的版本,讀者下載的時候只要比上述版本新都可以運行無礙。步驟2:增加hibernate的全局配置文件。配置文件名:hibernate.cfg.xml;文件作用:配置數(shù)據(jù)庫連接信息;存放路徑:在src目錄下;文檔初始內(nèi)容如下。<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><!--hibernate的全局配置就寫在這里--></hibernate-configuration>步驟3:增加與userinfo表相對應的java實體類Userinfo。編寫要點:userinfo表中的字段對應java實體類Userinfo中的成員變量;字段與成員變量的數(shù)據(jù)類型必須一致;成員變量的個數(shù)必須≥字段個數(shù);字段的名字和成員變量的名字可以相同,也可以不同(表名與對應類名也是如此),建議盡可能相同(不容易出錯);與字段對應的成員變量必須有get/set方法。類Userinfo的具體代碼參考如下:packagehibernate;//本例Userinfo類放在hibernate包下/***在hibernate中代表了Userinfo表的類。*/publicclassUserinfo{/**每個屬性和表的一個字段對應**/privateStringid;privateStringname;/**屬性的訪問方法**/publicvoidsetId(Stringid){this.id=id;}publicStringgetId(){returnid;}publicvoidsetName(Stringname){=name;}publicStringgetName(){return;}}步驟4:編寫表userinfo與類Userinfo的對應關系配置文件Userinfo.hbm.xml編寫要點:文件名前綴與對應類名一致;文件名后綴為.hbm.xml(固定);文件存放的位置與對應的類存放在一起(同個包中)。該文件的常規(guī)配置規(guī)則說明(詳細配置規(guī)則可參考hibernate3.jar包中org/hibernate/hibernate-mapping-3.0.dtd文檔)參考代碼如下:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><!--配置正文:在根元素hibernate-mapping與/hibernate-mapping之間是正文--><hibernate-mappingpackage="實體類所在的包名"> <!--配置實體類與表的對應關系,在元素class中配置--> <classname="類名"table="對應表名"> <idname="類中成員變量名"column="對應表中主鍵名"type="類中字段類型,比如字符串是:java.lang.String"length="表中字段長度"> <!--generator節(jié)點描述在表中插入一條數(shù)據(jù)時,其主鍵的值怎么賦值,該節(jié)點的class屬性值表示生成主鍵時采用的具體策略,默認值assigned表示主鍵生成策略交由程序員賦值,另外,native表示主鍵生成策略交由數(shù)據(jù)庫處理(比如自增長的主鍵),其他主鍵生成策略可參考hibernate官方文檔--> <generatorclass="主鍵生成策略,默認assigned"/> </id> <!--...如果主鍵是復合主鍵的話,要并列配置多個元素id(每個主鍵字段配置一個)--> <propertyname="類中成員變量名"column="對應表中非主鍵字段名"type="類中字段類型,比如字符串是:java.lang.String"length="50"not-null="true"/> <!--...如果有多個非主鍵字段的話,要并列配置多個元素property(每個字段配置一個)--> </class></hibernate-mapping>本例配置文件參考代碼如下:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage="hibernate"> <classname="Userinfo"table="userinfo"> <idname="id"column="userid"type="java.lang.String"length="20"> <generatorclass="assigned"/> </id> <propertyname="name"column="username"type="java.lang.String" length="50"not-null="true"/> </class></hibernate-mapping>【拓展】術語ORM的深入理解——完成步驟3與步驟4的用意何在?步驟3、4的完成就是ORM(對象關系映射)實現(xiàn),如圖3.1-2所示,實體類Userinfo的成員屬性與用戶信息表的字段進行對應,通過配置文件實現(xiàn)其對應關系。圖3.1-2ORM(對象關系映射)實現(xiàn)示意圖步驟5:在hibernate的全局配置文件中配置。該配置主要有兩個內(nèi)容。第一個是數(shù)據(jù)庫連接信息的配置,第二個是實體類與表的映射文件(*.hbm.xml)在全局配置文件中注冊,基本配置格式如下:<hibernate-configuration> <!--數(shù)據(jù)庫聯(lián)系信息放在元素session-factory里邊--> <session-factory> <!--指定數(shù)據(jù)庫名字,參數(shù)name的值"dialect"是關鍵字,表示本元素需要配置的內(nèi)容為數(shù)據(jù)庫名字--> <propertyname="dialect"> <!--這里填寫數(shù)據(jù)庫的名字,名字是由hibernate框架規(guī)定的,各個數(shù)據(jù)庫的名字就是對應的hibernate3.jar包下org.hibernate.dialect包中的各個class文件名再加上jar包的包路徑而得到,比如mysql數(shù)據(jù)庫名字為org.hibernate.dialect.MySQLDialect--> org.hibernate.dialect.MySQLDialect </property> <!--指定數(shù)據(jù)庫地址,參數(shù)name的值"connection.url"是關鍵字,表示本元素需要配置的內(nèi)容為數(shù)據(jù)庫地址--> <propertyname="connection.url"> <!--這里填寫數(shù)據(jù)庫地址,各個數(shù)據(jù)庫地址根據(jù)數(shù)據(jù)庫廠家的要求填寫,mysql的數(shù)據(jù)庫地址:jdbc:mysql://服務器ip地址:端口號/數(shù)據(jù)庫名?參數(shù)名=參數(shù)值,下面的是使用mysql的數(shù)據(jù)庫,testdb是數(shù)據(jù)庫名字,characterEncoding=utf-8表示使用utf-8的編碼格式--> jdbc:mysql://localhost/testdb?characterEncoding=utf-8 </property> <!--指定數(shù)據(jù)庫用戶名,參數(shù)name的值"connection.username"是關鍵字,表示本元素需要配置的內(nèi)容為數(shù)據(jù)庫用戶名,mysql數(shù)據(jù)庫默認為root--> <propertyname="connection.username">root</property> <!--指定數(shù)據(jù)庫登錄密碼,參數(shù)name的值"connection.password"是關鍵字,表示本元素需要配置的內(nèi)容為數(shù)據(jù)庫登錄密碼--> <propertyname="connection.password">數(shù)據(jù)庫登錄密碼</property> <!--指定數(shù)據(jù)庫驅(qū)動程序,參數(shù)name的值"connection.driver_class"是關鍵字,表示本元素需要配置的內(nèi)容為數(shù)據(jù)庫驅(qū)動程序--> <propertyname="connection.driver_class"> <!--這里填寫數(shù)據(jù)庫地址,各個數(shù)據(jù)庫驅(qū)動名稱根據(jù)數(shù)據(jù)庫廠家提供的程序名稱來填寫,mysql的數(shù)據(jù)庫為如下名字--> com.mysql.jdbc.Driver </property> <!--...以上為數(shù)據(jù)庫基本配置,更多的數(shù)據(jù)庫連接信息配置請參閱相關資料,這里略--> <!--注冊實體類與表的映射文件(*.hbm.xml),在元素mapping的resource參數(shù)后填寫映射文件的地址,格式為:包名/子包名/.../映射文件名--> <mappingresource="映射文件地址,比如:hibernate/Userinfo.hbm.xml"/> <!--...每一個實體類與表的映射文件都需要配置一個mapping元素,所以mapping元素與property元素一樣可以配置多個--> </session-factory></hibernate-configuration>注:創(chuàng)建Session-factory的其他屬性請參考hiberante官方文檔(該文檔在hibernate發(fā)布包documentation\manual\zh-CN路徑下有).。本例配置的關鍵代碼如下:<hibernate-configuration> <session-factory> <propertyname="dialect"> org.hibernate.dialect.MySQLDialect </property> <propertyname="connection.url"> jdbc:mysql://localhost/testdb?characterEncoding=utf-8 </property> <propertyname="connection.username">root</property> <propertyname="connection.password"></property> <propertyname="connection.driver_class"> com.mysql.jdbc.Driver </property> <mappingresource="hibernate/Userinfo.hbm.xml"/> </session-factory></hibernate-configuration>步驟6:使用hibernate框架代碼實現(xiàn)增刪查改的功能。其一般步驟如下:第一,創(chuàng)建sessionFactory對象(載入全局配置文件):SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();第二,執(zhí)行數(shù)據(jù)庫數(shù)據(jù)操作的對象session(連接數(shù)據(jù)庫):Sessionsession=sessionFactory.openSession();第三,開始一個事務:session.beginTransaction();第四,進行增加、刪除、修改、查詢的操作:增加操作的代碼,使用session對象的save或persist方法完成:session.persist(實體類對象);//或者session.save(實體類對象);刪除操作(根據(jù)主鍵id刪除)的代碼://使用session的load方法加載條件實體類實體類對象=(實體類)session.load(實體類.class,要刪除的id值);//使用session的delete方法執(zhí)行刪除session.delete(實體類對象);查詢(查詢所有)創(chuàng)建執(zhí)行hsql語句的對象queryQueryquery=session.createQuery(“from實體類名”);使用query對象的list方法查詢,結果為java.util.List對象List查詢結果對象=query.list();查詢(根據(jù)id查詢一條記錄)使用session的get加載查詢條件并根據(jù)id查詢出一個結果對象實體類實體類對象=(實體類)session.get(實體類.class,要刪除的記錄的id值)修改使用session的merge或update方法完成session.merge(實體類對象);//或者session.update(實體類對象);第五,提交一個事務(查詢操作不需要):session.getTransaction().commit();第六,關閉數(shù)據(jù)庫:session.close();本例使用hibernate框架代碼實現(xiàn)增刪查改的代碼參考如下:packagehibernate;importjava.util.*;importorg.hibernate.HibernateException;importorg.hibernate.Query;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;/***和userinfo相關的業(yè)務邏輯*/publicclassUserinfoTest{ //使用hibernate框架創(chuàng)建sessionFactory對象 SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory(); publicstaticvoidmain(String[]args){ UserinfoTestuserinfoTest=newUserinfoTest(); Userinfouserinfo=newUserinfo(); userinfo.setId("3"); userinfo.setName("張三"); //注:需要運行該方法的時候去掉注釋增加// userinfoTest.addUserinfo(userinfo);// //注:需要運行該方法的時候去掉注釋根據(jù)用戶名查詢指定的記錄// userinfoTest.findUserinfoById(userinfo.getId());// //注:需要運行該方法的時候去掉注釋修改// userinfoTest.update(userinfo);// //注:需要運行該方法的時候去掉注釋查詢所有// userinfoTest.list();// //注:需要運行該方法的時候去掉注釋根據(jù)id刪除一條記錄 userinfoTest.deleteUserinfoById(userinfo.getId()); } /** *增加一個Userinfo */ publicvoidaddUserinfo(Userinfouserinfo)throwsHibernateException{ //得到執(zhí)行數(shù)據(jù)庫數(shù)據(jù)操作的對象session Sessionsession=sessionFactory.openSession(); //開始一個事務 session.beginTransaction(); //核心的一句,使用session的persist方法保存 session.persist(userinfo); session.getTransaction().commit(); session.close(); } /** *根據(jù)用戶id查詢指定的記錄 * *@paramusername *@return */ publicvoidfindUserinfoById(Stringuserid){ Sessionsession=sessionFactory.openSession(); //使用session的get加載查詢條件并根據(jù)id查詢出一個結果對象 Userinfotmp=(Userinfo)session.get(Userinfo.class,userid); if(tmp!=null){ System.out.print

溫馨提示

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

最新文檔

評論

0/150

提交評論