Hibernate配置文件中映射元素详解_第1页
Hibernate配置文件中映射元素详解_第2页
Hibernate配置文件中映射元素详解_第3页
Hibernate配置文件中映射元素详解_第4页
Hibernate配置文件中映射元素详解_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、hibernate配置文件中映射元素详解添加时刻 :2007-4-22本文中将讲述hibernate的大体配置及配置文件的应用,这关于正确熟练利用hibernate是相当关键的。配置文件中映射元素详解对象关系的映射是用一个xml 文档来讲明的。 映射文档能够利用工具来生成,如 xdoclet, middlegen和 andromda等。下面从一个映射的例子开始讲解映射元素,映射文件的代码如下。?xml version=1.0?!- 所有的 xml 映射文件都需要定义如下所示的doctype 。hibernate会先在它的类路径(classptah)中搜索dtd 文件。- !doctype hi

2、bernate-mapping public -/hibernate/hibernate mapping dtd 3.0/en http :/ hibernate-mapping有几个可选的属性:schema属性指明了这个映射的表所在的schema名称。default-cascade属性指定了默认的级联风格可取值有none 、save 、update。auto-import属性默认让我们在查询语言中可以使用非全限定名的类名可取值有true 、false 。package属性指定一个包前缀。- hibernate-mapping schema=schemaname default-cascade

3、=none auto-import=true package=test!- 用 class 元素来定义一个持久化类- class name=people table=person!- id元素定义了属性到表主键字段的映射。- id name=id!- 用来为该持久化类的实例生成唯一的标识- generator class=native/id !- discriminator识别器是一种定义继承关系的映射方法- discriminator column=subclass type=character/!- property元素为类声明了一个持久化的,javabean风格的属性 - propert

4、y name=name type=stringcolumn name=name length=64 not-null=true /propertyproperty name=sex not-null=true update=false/!- 多对一映射关系 - many-to-one name=friend column=friend_id update=false/!- 设置关联关系 - set name=friends inverse=true order-by=idkey column=friend_id/!一对多映射 - one-to-many class=cat/set /class

5、 /hibernate-mapping组件应用的方式组件有两种类型,即组件(component)和动态组件( dynamic-component) 。在配置文件中,component元素为子对象的元素与父类对应表的字段成立起映射关系。然后组件能够声明它们自己的属性、组件或集合。component元素的概念如下所示:component name=propertyname class=classname insert=true|false upate=true|false access=field|property|classnameproperty ./many-to-one . /. /com

6、ponent在这段代码中, name是指属性名, class 是类的名字, insert指的是被映射的字段是不是出此刻sql的 insert 语句中, upate指出被映射的字段是不是出此刻sql 的 update 语句中, access指出访问属性的策略。hiebernate的大体配置hibernate的连接信息是从配置文件中加载的。hibernate的配置文件有两种形式:一种是xml 格式的文件,一种是properties属性文件。 properties形式的配置文件默许文件名是perties,一个 properties形式的配置文件内容如下所示:# 指定利用的驱

7、动类hibernate.connection.driver_class = com.mysql.jdbc.driver r # 指定连接串hibernate.connection.url = jdbc:mysql:/localhost:3306/db # 指定连接的用户名hibernate.connection.username = user # 指定连接的密码hibernate.connection.password = password # 指定使用的方言hibernate.dialect = net.sf.hibernate.dialect.mysqldialect # 指定是否打印sq

8、l 语句hibernate.show_sql=true 在配置文件中包括了一系列属性的配置,hibernate将依照这些属性来连接。在 xml 格式的配置文件中,除了基本的hibernate配置信息,还可以指定具体的持久化类的映射文件,这可以避免将持久化类的配置文件硬编码在程序中。xml 格式的配置文件的默认文件名为hibernate.cfg.xml,一个 xml 配置文件的示例如下所示:?xml version=1.0 encoding=utf-8?!doctype hibernate-configuration public -/hibernate/hibernate configurat

9、ion dtd 3.0/en http:/ 显示执行的sql 语句 - property name=show_sqltrue /property!- 连接字符串 - property name=connection.urljdbc:mysql:/localhost:3306/stu/property!- 连接的用户名 - property name=connection.usernameroot /property!- 用户密码 - property name=connection.passwordroot /property!- 驱动 - property name=connection.d

10、river_classcom.mysql.jdbc.driver/property!- 选择使用的方言 - property name=dialectorg.hibernate.dialect.mysqldialect/property!- 映射文件- mapping resource=com/stuman/domain/admin.hbm.xml /!- 映射文件 - mapping resource=com/stuman/domain/student.hbm.xml /session-factory/hibernate-configurationproperties形式的配置文件和xml

11、格式的配置文件能够同时利用。当同时利用两种类型的配置文件时, xml 配置文件中的设置会覆盖properties配置文件的相同的属性。对象标识符号在关系表中,主键(primary key)用来识别记录,并保证每条记录的唯一性。在java 语言中,通过比较两个变量所引用对象的内存地址是不是相同,或比较两个变量引用的对象值是不是相同来判定两对象是不是相等。 hibernate为了解决二者之间的不同,利用对象标识符 (oid )来标识对象的唯一性。oid是关系中主键在java 对象模型中的等价物。在运行时,hibernate依照 oid 来维持 java 对象和表中记录的对应关系。 如下代码所示,

12、三次挪用了session的 load()方式,别离加载 oid 为1 或3的 user 对象。transaction tx = session.begintransaction(); user user1 = (user)session.load(user.class,new long(1); user user2 = (user)session.load(user.class,new long(1); user user3 = (user)session.load(user.class,new long(3); system.out.println( user1 = user2 ); sys

13、tem.out.println( user1 = user3 ); 应用程序在执行上述代码时,第一次加载oid 为1 的 user 对象,从中查找id 为1 的记录,然后创建相应的 user实例,并把它保留在session缓存中,最后将该实例的引用赋值给变量user1 。第二次加载oid 为1 的对象时,直接把session缓存中 oid 为1的实例的引用赋值给变量user2 。因此,表达式user1=user2的结果为 true 。标识的生成可以使用不同的策略,表1为 hibernate内置的标识生成策略。表1 hibernate标识生成策略标识符生成器描述increment 适用于代理主键

14、。由hibernate自动以递增方式生成。identity 适用于代理主键。由底层生成标识符。sequence 适用于代理主键。hibernate根据底层的序列生成标识符,这要求底层支持序列。hilo 适用于代理主键。hibernate分局high/low算法生成标识符。seqhilo 适用于代理主键。使用一个高/低位算法来高效的生成long,short或者int类型的标识符。native 适用于代理主键。根据底层对自动生成标识符的方式,自动选择identity、sequence或hilo。适用于代理主键。hibernate采用128位的uuid算法生成标识符。适用于代理主键。uuid被编码成

15、一个16字符长的字符串。assigned 适用于自然主键。由java应用程序负责生成标识符。foreign 适用于代理主键。使用另外一个相关联的对象的标识符。hibernate映射类型在对象 / 关系映射文件中,hibernate采纳映射类型作为java 类型和 sql 类型的桥梁。 hibernate映射类型分为 2 种:内置映射类型和自概念映射类型。1 、内置映射类型hibernate对所有的java 原生类型、常用的 java 类型如 string 、 date 等都定义了内置的映射类型。表2列出了 hibernate映射类型、对应的java 类型以及对应的标准sql 类型。表2 hib

16、ernate内置映射类型hibernate映射类型java类型标准sql类型大小integer/int integer 4字节long bigint 8字节short smallint 2字节byte tinyint 1字节float float 4字节double double 8字节big_decimal numeric character char(1) 定长字符string varchar 变长字符boolean/ yes_no/true_false bit 布尔类型date date 日期timestamp timestamp 日期calendar timestamp 日期calen

17、dar_date date 日期binary byte blob blob text text clob serializable blob blob clob clob clob blob blob blob class varchar 定长字符locale varchar 定长字符timezone varchar 定长字符currency varchar 定长字符二、自概念映射类型hibernate提供了自定义映射类型接口,允许用户以编程的方式创建自定义的映射类型。用户自定义的映射类型需要实现net.sf.hibernate.usertype或 net.sf.hibernate.compo

18、siteusertype接口。具体的创建自定义映射类型的方法请参考hibernate官方文档或相关资料,这里不再详细介绍。hibernate 实体关联关系映射-总结hibernate 实体关联关系映射-总结花了三天的业余时刻,终于写完了hibernate关联关系映射的所有实例,感觉还应该总结一下。hibernate映射关系错综复杂,在实际中真的都能用到吗?不用行吗?在我眼里, hibernate提供这些映射关系,经常使用确实是一对一和多对一,而且在能不用连接表的时候尽可能不要用连接表。多对多会用到,若是用到了, 应该第一考虑底层数据库设计是不是合理。在实际开发中,在 hibernate关联关系

19、之外常常还有另外一种选择方案,表各自作为单表映射,业务逻辑操纵外键关系(有时候确实是一个相关联的列,但不必然要加外键约束),如此加倍灵活,而且数据的完整性一样有保证。固然,“ 单表映射,业务操纵外键关系” 并非是说 hibernate的实体关联功能是多余的,hibernate的实体关联的优势很多,随意拿本书都是讲优势,用好了会让开发人员感觉更方便,此刻我也是两种方案结合利用。比如关于不很确信的两个实体,常常选用单表关联。以前在初学hibernate尚未完全弄清楚这些关联关系的时候,确实是用单表映射,业务操纵外键关系做的,发觉没有任何问题,程序一样运行得专门好。看了这些是不是后悔浪费时刻学习映射

20、关系了?呵呵,hibernate的 or mapping是hibernate的灵魂,我相信hibernate的开创人比咱们一样人的明白得更深刻。只有学会了这些才能体会hibernate设计者的思想。学一个东西,不但自己写代码,还应该能看懂他人的代码才行。因此系统学习这些关联映射仍是大有必要的。以上都是我自己的观点。欢迎在此交流讨论。hibernate在实际项目开发中,hbm.xml包括数据库脚本都是通过xdoclet生成的, 在此不采纳 xdoclet的目的是为了便于明白得这些映射模型。实体-数据表 -映射文件三者对照看,太直观了。瞌睡了,临时先写到此,有新思路了再补上。 。 。hiberna

21、te关联关系映射目录 单向关联 双向关联hibernate 一对一外键单向关联事实上,单向 1-1 与 n-1的实质是相同的,1-1 是 n-1的特例,单向 1-1 与 n-1的映射配置也超级相似。只需要将原先的many-to-one元素增加unique=true属性,用于表示n 的一端也必需是唯一的, 在 n的一端增加了唯一的约束,即成为单向 1-1 。基于外键的单向1-1 的配置将与无连接表 n-1关联的 many-to-one增加 unique=true属性即可。一、模型介绍一个人( person )对应一个地址(address )。二、实体(省略getter、setter方式)publ

22、ic class person11fk private int personid; private string name; private int age; private address11fk address11fk;public class address11fk private int addressid; private string addressdetail;三、表模型mysql desc address_11fk;+-+-+-+-+-+-+| field | type | null | key | default | extra |+-+-+-+-+-+-+| address

23、id | int(11) | no | pri | null | auto_increment | addressdetail | varchar(255) | yes | | null | |+-+-+-+-+-+-+mysql desc person_11fk;+-+-+-+-+-+-+| field | type | null | key | default | extra |+-+-+-+-+-+-+| personid | int(11) | no | pri | null | auto_increment | name | varchar(255) | yes | | null |

24、 | age | int(11) | yes | | null | | addressid | int(11) | yes | uni | null | |+-+-+-+-+-+-+四、生成的sql脚本createtableaddress_11fk ( addressid int (11) notnullauto_increment, addressdetail varchar(255) defaultnull , primarykey(addressid) ) engine=innodb auto_increment=2 defaultcharset=gbk; createtablepers

25、on_11fk ( personid int (11) notnullauto_increment, name varchar(255) defaultnull , age int (11) defaultnull , addressid int (11) defaultnull , primarykey(personid), keyfk68a8818f3f45aa77 (addressid), constraintfk68a8818f3f45aa77 foreignkey (addressid) referencesaddress_11fk (addressid) ) engine=inno

26、db auto_increment=2 defaultcharset=gbk; 五、映射方式:在 person 中添加 address 属性,映射配置为: 六、测试方式publicclasstest_11fk publicstaticvoidmain(string args) person11fk p1= newperson11fk(); p1.setage(21); p1.setname(p1 ); address11fk add1=newaddress11fk(); add1.setaddressdetail(郑州市经三路); p1.setaddress11fk(add1); sessio

27、n session= hibernateutil.getcurrentsession(); transaction tx=session.begintransaction(); session.save(add1); session.save(p1); mit(); hibernateutil.closesession(); 七、测试结果1) :正常保留 . 推荐这么干 ! session.save(add1); session.save(p1);hibernate: insert into address_11fk (addressdetail) values (?)hibernate: i

28、nsert into person_11fk (name, age, addressid) values (?, ?, ?)2) :正常保留 . session.save(p1); session.save(add1);hibernate: insert into person_11fk (name, age, addressid) values (?, ?, ?)hibernate: insert into address_11fk (addressdetail) values (?)hibernate: update person_11fk set name=?, age=?, addre

29、ssid=? where personid=?3) :正常保留 ./ session.save(p1); session.save(add1);hibernate: insert into address_11fk (addressdetail) values (?)4) :发生异样 , 不能保留 . session.save(p1);/ session.save(add1);hibernate: insert into person_11fk (name, age, addressid) values (?, ?, ?)hibernate一对一主键单向关联1-1 的关联可以基于主键关联,但基

30、于主键关联的持久化类不能拥有自己的主键生成策略,它的主键由关联类负责生成。另外,另外,增加one-to-one元素来关联属性,必须为one-to-one元素增加 constrained=true属性,表明该类主键由关联类生成。一、模型介绍一个人( person )对应一个地址(address )。二、实体(省略getter、setter方法)public class person11pk private int personid; private string name; private int age; private address11pk address11pk;public class

31、 address11pk private int addressid; private string addressdetail;三、表模型mysql desc address_11pk;+-+-+-+-+-+-+| field | type | null | key | default | extra |+-+-+-+-+-+-+| addressid | int(11) | no | pri | null | auto_increment | addressdetail | varchar(255) | yes | | null | |+-+-+-+-+-+-+mysql desc per

32、son_11pk;+-+-+-+-+-+-+| field | type | null | key | default | extra |+-+-+-+-+-+-+| personid | int(11) | no | pri | | | name | varchar(255) | yes | | null | | age | int(11) | yes | | null | |+-+-+-+-+-+-+四、生成的sql脚本/* formatted on 2007/08/22 14:40 (qp5 v5.50) */create table address_11pk ( addressid i

33、nt(11) not null auto_increment, addressdetail varchar(255) default null, primary key (addressid) engine=innodb auto_increment=2 default charset=gbk;/* formatted on 2007/08/22 14:41 (qp5 v5.50) */create table person_11pk ( presonid int(11) not null, name varchar(255) default null, age int(11) default

34、 null, primary key (presonid), key fk68a882c591bb393e (presonid), constraint fk68a882c591bb393e foreign key (presonid) references address_11pk (addressid) engine=innodb default charset=gbk;五、映射方法:在person 中配置 id 生成策略为: address11pk . address11pk 六、测试方法public class test_11pk public static void main(str

35、ing args) person11pk p1=new person11pk(); p1.setage(21); p1.setname(p1); address11pk add1=new address11pk(); add1.setaddressdetail(郑州市经三路); p1.setaddress11pk(add1); session session= hibernateutil.getcurrentsession(); transaction tx=session.begintransaction(); session.save(add1); session.save(p1); mi

36、t(); hibernateutil.closesession(); 七、测试结果1) :正常保存 . 推荐这么干 ! session.save(add1); session.save(p1);hibernate: insert into address_11fk (addressdetail) values (?)hibernate: insert into person_11fk (name, age, addressid) values (?, ?, ?)2) :正常保存 . session.save(p1); session.save(add1);hibernate: insert i

37、nto person_11fk (name, age, addressid) values (?, ?, ?)hibernate: insert into address_11fk (addressdetail) values (?)hibernate: update person_11fk set name=?, age=?, addressid=? where personid=?3) :正常保存 ./ session.save(p1); session.save(add1);hibernate: insert into address_11fk (addressdetail) value

38、s (?)4) :发生异常 , 不能保存 . session.save(p1);/ session.save(add1);hibernate: insert into person_11fk (name, age, addressid) values (?, ?, ?)hibernate一对一连接表单向关联这种情况很少见, 但 hibernate同样允许采用连接表关联1-1. 有连接表的 1-1 同样只需要将n-1的 many-to-one元素增加unique=true属性即可。一、模型介绍一个人( person )对应一个地址(address )。二、实体(省略getter、setter方法

39、)public class person11tab private int personid; private string name; private int age; private address11tab address11tab;public class address11tab private int addressid; private string addressdetail;三、表模型mysql desc address_11tab;+-+-+-+-+-+-+| field | type | null | key | default | extra |+-+-+-+-+-+-

40、+| addressid | int(11) | no | pri | null | auto_increment | addressdetail | varchar(255) | yes | | null | |+-+-+-+-+-+-+mysql desc join_11tab;+-+-+-+-+-+-+| field | type | null | key | default | extra |+-+-+-+-+-+-+| personid | int(11) | no | pri | | | address11tab | int(11) | yes | uni | null | |+-

41、+-+-+-+-+-+mysql desc person_11tab;+-+-+-+-+-+-+| field | type | null | key | default | extra |+-+-+-+-+-+-+| personid | int(11) | no | pri | null | auto_increment | name | varchar(255) | yes | | null | | age | int(11) | yes | | null | |+-+-+-+-+-+-+四、生成的sql脚本/* formatted on 2007/08/20 16:52 (qp5 v5

42、.50) */create table join_11tab ( personid int(11) not null, address11tab int(11) default null, primary key (personid), unique key address11tab (address11tab), key fk6b44be20c4cc3d33 (address11tab), key fk6b44be209049bb1f (personid), constraint fk6b44be209049bb1f foreign key (personid) references per

43、son_11tab (personid), constraint fk6b44be20c4cc3d33 foreign key (address11tab) references address_11tab (addressid) engine=innodb default charset=gbk;/* formatted on 2007/08/20 16:53 (qp5 v5.50) */create table address_11tab ( addressid int(11) not null auto_increment, addressdetail varchar(255) defa

44、ult null, primary key (addressid) engine=innodb auto_increment=2 default charset=gbk;/* formatted on 2007/08/20 16:53 (qp5 v5.50) */create table person_11tab ( personid int(11) not null auto_increment, name varchar(255) default null, age int(11) default null, primary key (personid) engine=innodb aut

45、o_increment=2 default charset=gbk;五、映射方法:在 person 中添加 address 属性,映射配置为: 六、测试方法public class test_11tab public static void main(string args) person11tab p1=new person11tab(); p1.setage(21); p1.setname(p1); address11tab add1=new address11tab(); add1.setaddressdetail(郑州市经三路); p1.setaddress11tab(add1); s

46、ession session= hibernateutil.getcurrentsession(); transaction tx=session.begintransaction(); session.save(add1); session.save(p1); mit(); hibernateutil.closesession(); 七、测试结果1) :正常保存 . 推荐这么干 ! session.save(add1); session.save(p1);hibernate: insert into address_11tab (addressdetail) values (?)hibern

47、ate: insert into person_11tab (name, age) values (?, ?)hibernate: insert into join_11tab (address11tab, personid) values (?, ?)2) :正常保存 . session.save(p1); session.save(add1);hibernate: insert into person_11tab (name, age) values (?, ?)hibernate: insert into join_11tab (address11tab, personid) value

48、s (?, ?)hibernate: insert into address_11tab (addressdetail) values (?)hibernate: update join_11tab set address11tab=? where personid=?3) :正常保存 ./ session.save(p1); session.save(add1);hibernate: insert into address_11tab (addressdetail) values (?)4) :发生异常 , 不能保存 . session.save(p1);/ session.save(add

49、1);hibernate: insert into person_11tab (name, age) values (?, ?)hibernate: insert into join_11tab (address11tab, personid) values (?, ?)hibernate一对多外键单向关联这种情况很少见, 但 hibernate同样允许采用连接表关联1-1. 有连接表的 1-1 同样只需要将n-1的 many-to-one元素增加unique=true属性即可。一、模型介绍一个人( person )对应多个地址(address ),比如家庭地址、公司地址。二、实体(省略get

50、ter、setter方法)public class person1nfk implements serializable private int personid; private string name; private int age; private set addresses=new hashset();public class address1nfk implements serializable private int addressid; private string addressdetail;三、表模型mysql desc address_1nfk;+-+-+-+-+-+-+

51、| field | type | null | key | default | extra |+-+-+-+-+-+-+| addressid | int(11) | no | pri | null | auto_increment | addressdetail | varchar(255) | yes | | null | | personid | int(11) | yes | mul | null | |+-+-+-+-+-+-+mysql desc person_1nfk;+-+-+-+-+-+-+| field | type | null | key | default | ext

52、ra |+-+-+-+-+-+-+| personid | int(11) | no | pri | null | auto_increment | name | varchar(255) | yes | | null | | age | int(11) | yes | | null | |+-+-+-+-+-+-+四、生成的sql脚本 /* formatted on 2007/08/21 10:06 (qp5 v5.50) */ create table address_1nfk ( addressid int(11) not null auto_increment, addressdeta

53、il varchar(255) default null, addresses int(11) default null, primary key (addressid), key fk9b93456dc08d1667 (addresses), constraint fk9b93456dc08d1667 foreign key (addresses) references person_1nfk (personid) ) engine=innodb auto_increment=3 default charset=gbk; /* formatted on 2007/08/21 10:07 (q

54、p5 v5.50) */ create table person_1nfk ( personid int(11) not null auto_increment, name varchar(255) default null, age int(11) default null, primary key (personid) ) engine=innodb auto_increment=2 default charset=gbk;五、映射方法:在实体类person 里面添加address 的集合,即可形成一对多关系。 六、测试方法public class test_1nfk public sta

55、tic void main(string args) address1nfk add1=new address1nfk(); address1nfk add2=new address1nfk(); person1nfk p=new person1nfk(); add1.setaddressdetail(郑州市经三路); add2.setaddressdetail(合肥市宿州路); p.setname(wang); p.setage(30); p.getaddresses().add(add1); p.getaddresses().add(add2); session session= hibe

56、rnateutil.getcurrentsession(); transaction tx=session.begintransaction(); session.save(add1); session.save(add2); session.save(p); mit(); hibernateutil.closesession(); 七、测试结果1) :正常保存 ./ session.save(add1);/ session.save(add2); session.save(p);hibernate: insert into person_1nfk (name, age) values (?,

57、 ?)hibernate: insert into address_1nfk (addressdetail) values (?)hibernate: insert into address_1nfk (addressdetail) values (?)hibernate: update address_1nfk set personid=? where addressid=?hibernate: update address_1nfk set personid=? where addressid=?2) :正常保存 . session.save(add1); session.save(add

58、2); session.save(p);hibernate: insert into address_1nfk (addressdetail) values (?)hibernate: insert into address_1nfk (addressdetail) values (?)hibernate: insert into person_1nfk (name, age) values (?, ?)hibernate: update address_1nfk set personid=? where addressid=?hibernate: update address_1nfk se

59、t personid=? where addressid=?3) :正常保存 . session.save(add1); session.save(add2);/ session.save(p);hibernate: insert into address_1nfk (addressdetail) values (?)hibernate: insert into address_1nfk (addressdetail) values (?)hibernate一对多连接表单向关联一、模型介绍一个人( person )对应多个地址(address ),比如家庭地址、公司地址。二、实体(省略gett

60、er、setter方法)public class person1ntab private int personid; private string name; private int age; private set addresses=new hashset();public class address1nfk implements serializable private int addressid; private string addressdetail;三、表模型mysql desc join_1ntab;+-+-+-+-+-+-+| field | type | null | ke

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论