Hibernate3-1环境及基础配置_第1页
Hibernate3-1环境及基础配置_第2页
Hibernate3-1环境及基础配置_第3页
Hibernate3-1环境及基础配置_第4页
Hibernate3-1环境及基础配置_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、J2EE企业级应用开发Hibernate 框架任务1 开发第一个Hibernate应用本任务主要内容 数据持久化与ORM Hibernate框架基础 搭建Hibernate的开发环境 Hibernate的基础配置 Hibernate的生命周期 Hibernate的常用API知识目标知识目标 了解数据的持久化与ORM 了解Hibernate3的工作原理 掌握Hibernate3进行数据持久化的使用 掌握Hibernate3的配置和映射 理解Hibernate的生命周期能力目标能力目标 能理解Hibernate的作用 能开发第一个Hibernate程序 能在Web开发中综合struts和Hiber

2、nate 能使用Hibernate的相关类实现数据持久化操作一、持久化与ORM 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。 持久层持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道 持久层包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。持久化与ORM 面向对象程序设计语言与关系数据库发展不同步时,需要一种中间解决方案,ORM( Object/Relation Mapping )框架就是这

3、样的解决方案。 ORM是一类框架的总称,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系数据库的映射。将关系数据库中数据用对象的形式表现,并用面向对象的方式组织对象,实现系统的业务逻辑。 基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。持久化与ORM常见ORM框架 目前ORM框架的产品非常多,除了各大著名公司、组织的产品外,甚至,其他一些小团队也都有推出自己的ORM框架。目前流行的ORM框架有如下这些产品。 传统的Entity EJB, Hibernate, IBATIS, Oracle的TopLink, OJB, JPA(Java

4、 Persistence API) 二、Hibernate概述简介 Hibernate是目前最流行的开源的持久层框架ORM框架,它是一个面向Java环境的对象/关系数据库映射工具。 Hibernate也是一个轻量级的O/R Mapping框架,建立面向对象的域模型和关系数据模型之间的映射,是连接java应用和数据库的中间件。 Hibernate对JDBC进行封装,负责java对象的持久化。真正实现了开发者采用面向对象的方式来操作关系数据库。 Hibernate在分层结构中处于持久化层持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。Hibernate概述优点 Hibernat

5、e能在众多的ORM框架中脱颖而出,因为Hibernate与其他ORM框架对比具有如下优势: Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 开源和免费的License,方便需要时研究源代码、改写源代码、进行功能定制。 Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。 Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作。 Hibernate概述体系结构 在分层体系架构中,Hibernate负责应用程序与数据

6、库之间的数据交换,起ORM中间件的作用,使得应用程序通过Hibernate的API就可以访问数据库。 Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)配置连接相关信息配置对象和表的映射关系 Hibernate概述-对象持久化概述 Hibernate中间件:Hibernate不和特定的业务领域相关,能够把任意一个Java应用与数据库系统连接,可以理解为是一种中间件。应用1业务逻辑层应用2业务逻辑层应用3业务逻辑层持久化层(hibernate)数据库1数据库2数据库3持久化层封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标:1

7、.代码重用性高,可完成所有的数据访问操作。2.如果需要的话,能够支持多种数据库平台。3.具有相对独立性,当持久化层变化时,不会影响上层实现。public List getAllEmpl() List list = new ArrayList();/ ?con = new DBCon().getConn();String sql = select * from tb_empl;try pstmt = con.prepareStatement(sql);rs = pstmt.executeQuery();int id;String empl_id, empl_name, empl_depart,

8、sex, intime, bz, interest, empl_pass1, prov, city;while (rs.next() id = rs.getInt(1);empl_id = rs.getString(2);empl_name = rs.getString(3);empl_pass1 = rs.getString(4);sex = rs.getString(5);interest = rs.getString(6);empl_depart = rs.getString(7);prov = rs.getString(8);city = rs.getString(9);intime

9、= rs.getString(10);bz = rs.getString(11);Empl e = new Empl();e.setId(id);e.setEmpl_id(empl_id);e.setEmpl_name(empl_name);e.setEmpl_pass1(empl_pass1);e.setSex(sex);e.setInterest(interest);e.setEmpl_depart(empl_depart);e.setProv(prov);e.setCity(city);e.setIntime(intime);e.setBz(bz);list.add(e); catch

10、(SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return list;1.简化开发过程2.业务逻辑与数据逻辑相分离(业务人员不需要考虑数据表的逻辑结构)3.数据访问逻辑与物理数据库的结构相分离(数据访问逻辑的开发者不再关心不同的物理数据库的差异性)JDBC查询数据,并添加数据到列表中。Session session=HibernateSessionFactory.getSession();Query query=session.createQuery(from tb_empl);List allemp

11、ls=query.list();ORM三、Hibernate3的应用使用步骤 在应用中使用Hibernate,首先必须进行Hibernate与数据库驱动、连接设置、ORM映射文件的创建等。 使用使用Hibernate的开发步骤如下的开发步骤如下: 设计设计:一般首先进行领域对象的设计。因为在Hibernate中,我们的领域对象可以直接充当持久化类。 映射映射:定义Hibernate的映射文件,实现持久化类和数据库之间映射。 应用应用:使用Hibernate提供的API,实现具体的持久化业务。第一个Hibernate程序的开发1加载包 Hibernate并不依赖于任何服务器和框架,只要把Hibe

12、rnate的jar包添加即可。 方法: 1.官网下载Hibernate包后加载必备包 2. MyEclipse-Project Capabilities-add Hibernate Capabilities 第一个Hibernate程序的开发2 创建数据库及表 创建数据库并创建数据表person,包括属性:id,name,age. 其中:主键id字段设为自动增长,对应于实体类中的id属性。第一个Hibernate程序的开发3 创建持久化类 在Hibernate 中是直接使用POJO来作为持久化类的。 持久化类符合JavaBean的规范,包含:属性(一般有一个id,作为OID)、无参构造方法、g

13、etter和setter方法。 在Web编程中,为了在会话中对Java对象进行持久化,一般要实现Serializable接口。 示例:定义持久化类Person第一个Hibernate程序的开发4 编写配置文件 Hibernate的核心配置文件是hibernate.cfg.xml,也可以为perties。 在此文件中配置了用于连接数据库的信息和一些全局配置连接数据库的信息和一些全局配置, 一般直接放在src目录下。 可在MyEclipse下创建相应的数据库连接,添加Hibernate功能包时,直接使用连接,自动生成配置文件。 示例:创建配置文件hibernate.cfg

14、.xml com.microsoft.jdbc.sqlserver.SQLServerDriver jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=pubs sa 123 org.hibernate.dialect.SQLServerDialect mysqlserver 第一个Hibernate程序的开发5 编写映射文件 映射文件实现数据库字段与持久化类属性匹配。 在hibernate中习惯的命名为“*.hbm.xml”文件,一般映射文件与其对应的持久化类在同一级目录中。 可以在MyEclipse中用反向工程生成。 示例:创建映射文

15、件person.hbm.xml 主键映射类-表映射字段映射第一个Hibernate程序的开发6 编写测试程序 Hibernate可以应用于Java程序或Web程序 。 先初始化Hibernate,创建一个SessionFactory实例;接下来每次执行数据库事务时,先从SessionFactory中获取得一个Session实例,再通过它来保存、更新、删除、加载或查询Java对象。 示例:创建Java测试程序 ,将一个对象的信息保存到数据库中。示例:测试数据保存public class HibernateTest public static void main(String args) Pers

16、on person=new Person();person.setName(zhang);person.setAge(20);Session sess = HibernateSessionFactory.getSession();Transaction trans = sess.beginTransaction();sess.save(person);mit();System.out.println(“恭喜,第一个Hibernate程序运行成功,记录已插入数据表中!);sess.close();Configuration config = new Configuration(); config

17、.configure();/ 配置文件名不是hibernate.cfg.xml时将文件名传入 SessionFactory sessionFactory = config.buildSessionFactory();/ 相当于JDBC的注册驱动 Session session = sessionFactory.openSession();/ 相当于JDBC的getConnection Transaction tx = session.beginTransaction();/ Hibernate操作必须启动事务 Person person=new Person(); / 创建持久化对象 pers

18、on.setName(zhang); person.setAge(20); session.save(person);/ 保存对象 mit();/ 持久化到数据库中 Hibernate运行过程HibernateHibernate的运行过程如下:的运行过程如下:1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,2、并用这些信息生成一个SessionFactory对象,3、然后从SessionFactory对象生成一个Session对象,4、并用Session对象生成Transaction对象; A、可通过Session对象的get(),load

19、(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作; B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。Hibernate运行过程应用程序 Configuration SessionFactory Session Query 映射文件.hbm.xmlTransaction配置文件hibernate.cfg.xml 回滚 提交 数据库 查询异常正常实践练习 使用Hibernate实现用户数据的保存、

20、删除 步骤一(手动方式)(1)创建用户数据表(2)创建相应的用户实体类(3)配置hibernate环境 (加载必备包)(4)创建hibernate.cfg.xml配置文件(一般放src下)(5)创建映射文件*.hbm.xml(和实体类一个路径)(6)测试类 步骤二(反向工程)四、Hibernate配置和映射配置 由于Hibernate是为了能在各种不同环境下工作而设计的,因此存在着大量的配置参数。 Hibernate同时支持XML格式和properties格式的配置文件,如果Hibernate配置文件为XML格式,文件名一般默认为“hibernate.cfg.xml”;如果为propertie

21、s格式,则默认为“perties”。 对于Web 应用而言,配置文件应放置在服务器的WEB-INFclasses 目录下,配置文件放在src目录下,自动部署。 jdbc:microsoft:sqlserver:/localhost:1433;Database=hibdb com.microsoft.jdbc.sqlserver.SQLServerDriver sa 123 org.hibernate.dialect.SQLServerDialect true 属性名属性名用途用途属性值属性值hibernate.connection.driver_class设置数据库的

22、驱动类驱动类名hibernate.connection.url设置连接数据库的URLURLhibernate.connection.username设置连接数据库的用户名用户名hibernate.connection.password设置连接数据库的密码密码hibernate.connection.pool_size设置连接池的最大容量整型数据hibernate.connection.datasource设置数据源的JNDI名字JNDI名hibernate.dialect设置Hibernate的数据库方言方言类名hibernate.show_sql 是否把Hibernate运行时的SQL语句输

23、出true或falsehibernate.format_sql 是否格式化输出的SQL语句true或falsehibernate.default_catalog在生成的SQL语句中,将默认的catalog加到表名上catalog值hibernate.connection.auotocommit设置是否启用数据库事务的自动提交true或者falsehibernate.max_fetch_depth为单向关联的一对一和多对一的外连接抓取(outer join fetch)设置最大深度,数值为0将关闭默认的外连接抓取推荐数值为03 hibernate.default_batch_fetch_size

24、设置关联的批量抓取数量建议值4、8、16hibernate.default_entity_mode指定默认的持久化实体表现形式dynamic-map、pojo或dom4jhibernate.order_updates 强制Hibernate按照被更新数据的主键,为SQL更新排序,可以减少在高并发系统中事务的死锁几率true或falsehibernate.generate_statistics 是否激活收集性能调节的统计数据 true或falsehibernate.order_updates利用主键值对将要更新的字段进行排序true或falseHibernate.user_indentifer_

25、rollback若设置为true,如果表中的所有数据被删除,主键标识符将被重置true或falsehibernate.use_sql_comments 是否生成有助于调试的注释信息true或false四、Hibernate配置和映射映射概述 对象关系映射(ORM)是一种为了解决面向对象与面向关系数据库互不匹配现象的技术,即ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。 Hibernate映射主要是通过对象关系映射文件实现,通常用XML文档来定义。 对象关系映射文件把数据库中的实体对象关系映射文件把数据库中的实体(一般为二维表一般为二维表)映射

26、到面向对象中映射到面向对象中的实体对象的实体对象,把数据库中多个表之间的相互关系也反映到映射好的类中。四、Hibernate配置和映射映射结构 映射文件以持久化类为基础,将持久化类中出现的属性在映射文件中体现出来。 实体映射是类与表之间的联系纽带,实体映射的核心内容是实体类与数据表之间的映射定义。 Hibernate中,实体关系映射主要包括三个部分: 类表映射 主键映射 字段映射 四、Hibernate配置和映射 元素是Hibernate映射文件的根元素。 1.类类表映射表映射 配置代码如下: 其中,class表示类和数据库中的表的映射关系;name属性指定类的名称,这里需要给出完整的类名;t

27、able属性指定与类映射的表名。 通过映射,类对应于数据库中的表,类的实例对应于表中的记录类对应于数据库中的表,类的实例对应于表中的记录。四、Hibernate配置和映射 关系数据库中依靠主键来区分不同的记录,被映射的类必须定义对应数据库主键字段。 2. 主键映射主键映射 其中,id表示主键映射;表示主键映射;name属性指定类中哪个属性作为属性指定类中哪个属性作为OID;type属性指定属性指定Hiberante的映射类型;的映射类型;column属性表示数据表中主键字段的名字属性表示数据表中主键字段的名字。 指定了主键的生成方式,class属性指定主键的生成方式四、Hibernate配置和

28、映射OID Hibernate使用对象标识符对象标识符(OID)来建立内存中的对象和表中记录的对应关系,它和表的主键对应为了保证OID的惟一性和不可变性,应该让Hibernate而不是应用程序来为OID赋值,数据库表的主键值也是可由Hibernate生成.四、Hibernate配置和映射内置生成器 可以借助可以借助Hibernate来自动生成一个来自动生成一个OID。使用的是元素,class属性设定标识符生成器的类名,可写它的完整类名:org.hibernate.id.IncrementGenerator,一般用其简称:increment。 关系数据库中依靠主键来区分不同的记录,主键有自然主键

29、与代理主键自然主键与代理主键: 自然主键指充当主键的字段本身具有一定的含义,是构成记录的组成部分,如学生的学号 代理主键指充当主键的字段本身不具有业务含义,只起主键主键作用,如自动增长类型的ID号等。 在Hibernate应用方案中,推荐使用代理主键代理主键。四、Hibernate配置和映射内置生成器increment: 当向数据库中插入新记录时,主键自动增1,与底层数据库无关,大部分数据库都支持increment生成方式。identity: 使用数据库提供的主键生成机制,自动为主键赋值。与底层数据库相关,不便于不同数据库之间的移植,数据库必须支持自动增长字段类型sequence: Hiber

30、nate根据底层数据库序列来生成标识符,前提是条件是底层数据库支持序列(如Oracle)。hilo: Hibernate根据high/low算法来生成标识符,需要一个表来保存额外的主键信息,这样生成的标识符只在特定的数据库中是惟一的。native: 由由Hibernate根据不同的数据库选择主键的生成方式根据不同的数据库选择主键的生成方式,如identity、sequence或hilo,与底层数据库无关,便于不同数据库之间的移植。uuid.hex: Hibernate采用128位的UUID算法来生成标识符,UUID算法能够在网络环境中生成唯一的字符串标识符。uuid.string: 使用UUI

31、D算法来生成标识符,UUID被编码为一个16个字符长的任意ASCII组成的字符串。assigned: 由由Java应用程序负责为对象生成标识符,主键值完全由应用程序负责应用程序负责为对象生成标识符,主键值完全由应用程序负责,需在保存数据前完成。 四、Hibernate配置和映射内置生成器 选用Hibernate内置的标识生成器时,应根据所选用的数据库产品而定。 若数据库产品为MySQL或MS SQL Server,则优先考虑identity生成器; 若是Oracle则可优先考虑sequence生成器; 若想提高应用的可移植性,开发跨平台的应用则可选用native生成器。四、Hibernate配

32、置和映射 字段映射将映射类型与数据库表的字段相关,一般包含对象的属性名、数据表的字段名和数据类型。 3.字段映射字段映射 其中,其中,property表示属性设置,表示属性设置,name表示类中属性名,将映射到指定的数据表字段表示类中属性名,将映射到指定的数据表字段;type表示映射的数据类型;表示映射的数据类型; column表示数据表字段,表示数据表字段,name表示数据表中对应于类属性的字段名。表示数据表中对应于类属性的字段名。实践练习 创建机构(Branch)实体,实现机构信息的持久化,正确配置实体映射文件(Branch.hbm.xml) 注意:主键的生成策略 思考:对应于实体属性不同

33、类型,type属性值该设为什么?四、Hibernate配置和映射 关于type属性可以是如下几种: (1)Hibernate基本类型基本类型名(比如:integer, string, character, date, timestamp, float, binary, serializable, object, blob)。 (2)一个Java类的名字类的名字,这个类属于一种默认基础类型(比如: int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob)。 (3)一个可以序列化的可以

34、序列化的Java类的名字类的名字。 (4)一个自定义类型的类的名字。自定义类型的类的名字。(比如:com.test.type.MyCustomType)。四、Hibernate配置和映射类型关系 Hibernate的内置类型通常使用和Java类型相同的名字,它能够把Java基本类型、Java时间和日期类型、Java大对象类型及JDK常用的Java类型映射到相应的标准SQL类型。 Java应用通过Hibernate访问数据库,而Hibernate又通过JDBC驱动程序访数据库,JDBC对底层数据库SQL类型进行封装,向上提供标准的SQL类型接口,这样Hibernate就可以根据底层数据库使用的S

35、QL方言,把标准SQL类型翻译成底成数据库类型。四、Hibernate配置和映射类型映射关系 下表列出了Hibernate映射类型、对应的JAVA基本类型(包括它们的包装类)和以及对应的标准SQL类型。四、Hibernate配置和映射类型映射关系 在Java中,代表时间和日志的类型包括:java.util.Date和java.util.Calendar。此外在JDBC API中还提供了三个扩展java.util.Date类的之类:java.sql.Date、java.sql.Time和java.sql.Timestamp,这三个类分别和标准的SQL类型中的DATA、TIME、TIMESTAMP

36、类型对应 在JDBC API中提供了java.sql.Clob和java.sql.Blob类型,它们分别和标准SQL中的CLOB和BLOB类型对应。实践练习 创建员工(Employee)实体,创建其映射文件,配置合适的类型对应关系,实现员工信息的基本管理 注意:员工属性的类型匹配。五、持久化对象与生命周期 Hibernate中有三种状态,对其生命周期状态有了深入理解,才能更好的理解Hibernate的运行机制。对于需要持久化的Java对象,在其生命周期中一般有三种状态:临时状态、持久化状态、游离状态三种状态:临时状态、持久化状态、游离状态,这三种状态之间可以互相转化。 一个持久化类的实例可能处

37、于三种不同状态中的某一种。这三种状态的定义则与所谓的持久化上下文(persistence context)有关。 Hibernate的Session对象就是这个所谓的持久化上下文。五、持久化对象与生命周期 临时状态一般是用new创建的对象,没有进行持久化,还未处于Session中,此时的对象叫临时对象; 持久化状态是对象已经加入到了Session缓存中,如通过hibernate语句保存的对象,此时的对象叫做持久化对象; 游离状态是持久化对象脱离了Session对象,如Session缓存被清空的对象,虽然已经持久化了,但是不在Session中,此时的对象叫做游离对象。五、持久化对象与生命周期六、

38、Hibernate核心类概述 使用Hibernate核心接口与类不仅可以存储和获得持久对象,还能够进行事务控制。 Hibernate的核心接口一共有5个,分别为: SessionFactory Session Transaction Query Configuration 获取找到hibernate.cfg.xml 链接 六、 Hibernate核心类Configuration类 Configuration类的作用是对Hibernate进行配置,以及对它进行启动。Configuration可以完成以下几方面的工作。(1)加载配置文件。在Hibernate的启动过程中,Configuration

39、类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象,(2)动态添加映射文件。还可以利用Configuration类在程序中添加XML映射定义文件。(3)也可以通过Configuration指定配置属性在在HibernateHibernate的启动过程中,的启动过程中,ConfigurationConfiguration类的类的实例首先定位缺省实例首先定位缺省XMLXML配置文件配置文件(hibernate.cfg.xmlhibernate.cfg.xml),并读取关的配置项目,),并读取关的配置项目,然后创建出一个然后创建出一个SessionFactor

40、ySessionFactory对象。对象。六、 Hibernate核心类SessionFactory类 这里用到了一个设计模式工厂模式,用户程序从工厂类用户程序从工厂类SessionFactory中中取得取得Session的实例的实例。 SessionFactory不是轻量级的。它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当项目要操作多个数据库时,必须为每个数据库指定一个SessionFactory。 SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语

41、句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。 获取:获取:SessionFactory sessionFactory = config.buildSessionFactory();六、 Hibernate核心类Session类 Session是持久层操作的基础,相当于JDBC中的Connection。 在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。 通常将每一个Session实例和一个数据库事务绑定,也就是说,每执行一个数据库事务(操作),都应该先创建一个新的Session实例。 获取:Session session = se

42、ssionFactory.openSession();六、 Hibernate核心类Session类 对于数据操作通常会是CRUD,Session接口中提供了的save、load、delete、update等方法完成持久层操作。 save (Object object) 首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化。 load (Class theClass, Serializable id) 在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例。 get (Class theClass, Serializable id)

43、delete (Object object)从数据库中移除持久化(persistent)对象的实例。 update (Object object)根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例。六、 Hibernate核心类Session类 Session.save()方法用于实体对象的持久化保存,也就是说当执行session.save()方法时会生成对应的insert SQL语句,完成数据的保存。 代码:Person user=new Person();user.setName(“zx”);/开始一个事务Transaction tx=session.beginTransaction();session.save(user);session.flush();/提交mit();session.close();/关闭事务tx.close六、 Hibernate核心类Session类 delete()方法用于从数据库中删除一个实体所对应的数据,如果传入的对象是持久化对象,那么当清理缓存时,就会执行delete操作。如果传入的是脱管对象,那么首先会使该对象与session相关联,然后当清

温馨提示

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

评论

0/150

提交评论