




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate入门 主要内容 2 Java应用分层架构及软件模型应用程序的分层体系结构软件的模型Java对象持久化技术概述直接通过JDBCAPI来持久化实体域对象ORM简介HibernateAPI简介第一个Hibernate应用创建Hibernate的配置文件创建持久化类创建数据库Schema创建对象 关系映射文件通过HibernateAPI操纵数据库运行helloapp应用 Java应用分层架构及软件模型 Hibernate是 连接Java应用程序和关系数据库的中间件 对JDBCAPI进行了封装 负责Java对象的持久化 在分层的软件架构中它位于持久化层 封装了所有数据访问的细节 使用业务逻辑层可以专注于实现业务逻辑 一种ORM映射工具 能够建立面向对象的域模型和关系数据模型之间的映射 Java应用分层架构及软件模型 应用程序的分层体系结构 应用程序的分层体系结构发展 Java应用分层架构及软件模型 应用程序的分层体系结构软件分层的优点伸缩性 应用程序是否能支持更多的用户 双层 三层 可维护性可扩展性 在现有系统中增加新功能的难易程度可重用性可管理性 管理系统的难易程度 将应用程序分为多层后 可以将工作分解给不同的开发小组 从而便于管理 应用越复杂 规模越大 需要的层就越多 Java应用分层架构及软件模型 应用程序的分层体系结构持久化层 持久化层封装了数据访问细节 为业务逻辑层提供了面向对象的API 目标 1 代码可重用性高 能够完成所有的数据库访问操作 2 能够支持多种数据平台 3 具有相对独立性 当持久化层的实现发生变化 不会影响上层的实现 Java应用分层架构及软件模型 应用程序的分层体系结构Hibernate是持久化层的一种实现方式 Hibernate不和特定的业务领域相关 能够把任意一个Java应用与数据库系统连接 它是一种中间件 Java应用分层架构及软件模型 软件的模型在软件开发领域 模型用来表示真实世界的实体 在软件开发的不同阶段 需要为目标系统创建不同类型的模型 在分析阶段 需要创建概念模型在设计阶段 需要创建域模型和数据模型 Java应用分层架构及软件模型 软件的模型概念模型在建立模型之前 首先要对问题域进行详细分析 确定用例 然后根据用例建立概念模型 概念模型用来模拟问题域中的真实实体 描述了每个实体的概念和属性 以及实体之间的关系 但并不描述实体的行为 购物网站应用的概念模型 Java应用分层架构及软件模型 软件的模型关系数据模型在概念模型的基础上建立起来的 用于描述这些关系数据的静态结构 它由以下内容组成 一个或多个表表的所有索引视图触发器 存储过程 函数表与表之间的参照完整性 Java应用分层架构及软件模型 软件的模型关系数据模型 续 表与表之间的参照完整性 Java应用分层架构及软件模型 软件的模型域模型域模型是面向对象的 在面向对象术语中 域模型也可称为设计模型 域模型由以下内容组成 具有状态和行为的域对象域对象之间的关系域对象可以代表业务领域中的人 地点 事物或概念实体域对象 业务领域的名词 客户 订单 商品等 在J2EE中 作为实体EJB 在非J2EE中 作为包含状态和行为的JavaBean 采用JavaBean形式的实体域对象也称为POJOPlainOldJavaObject 过程域对象 代表应用中的业务逻辑或流程 如客户发出订单 登录应用等 事件域对象 代表应用中的一些事件 如异常 超时或警告 Java应用分层架构及软件模型 软件的模型域模型域对象之间的关系 关联关系 引用关系 Java应用分层架构及软件模型 软件的模型域模型域对象之间的关系 依赖关系 访问关系 如果类A访问类B的属性或方法 或者类A负责实例化类B 则可以说类A依赖类B 在BusinessService类中访问Customer类的方法 并且构造Customer类的实例 Java应用分层架构及软件模型 软件的模型域模型域对象之间的关系 聚集关系聚集指的是整体与部分之间的关系 在实体域对象之间很常见 Java应用分层架构及软件模型 软件的模型域模型域对象之间的关系 一般化关系一般化指的是类之间的继承关系 Java应用分层架构及软件模型 软件的模型域对象的持久化概念狭义的理解 持久化 仅仅指把域对象永久保存到数据库中 广义的理解 持久化 包括和数据库相关的各种操作 保存 把域对象永久保存到数据库中 更新 更新数据库中域对象的状态 删除 从数据库中删除一个域对象 加载 根据特定的OID 把一个域对象从数据库加载到内存中 查询 根据特定的查询条件 把符合查询条件的一个或多个域对象从数据库加载到内存中 Java对象持久化技术概述 通过JDBCAPI来持久化实体域对象Java应用访问数据库的最直接的方式就是直接访问JDBCAPI JDBC是JavaDatabaseConnectivity的缩写 java sql包提供了JDBCAPI 在java sql包中常用的接口和类包括 DriverManager 驱动程序管理器 负责创建数据库连接 Connection 代表数据库连接 Statement 负责执行SQL语句 PreparedStatement 负责执行SQL语句 具有预定义SQL语句的功能 ResultSet 代表SQL查询语句的查询结果集 Java对象持久化技术概述 通过JDBCAPI来持久化实体域对象 续 Java应用必须通过JDBC驱动程序来和特定的数据库系统连接 Java对象持久化技术概述 通过JDBCAPI来持久化实体域对象 续 JDBCAPI java sql包中主要类的类框图 Java对象持久化技术概述 通过JDBCAPI来持久化实体域对象 续 实例分析 负责持久化Customer对象的BusinessServicesaveCustomer 把Customer域对象永久保存到数据库中 updateCustomer 更新数据库中Customer域对象的状态 deleteCustomer 从数据库中删除一个Customer域对象 loadCustomer 根据特定的OID 把一个Customer域对象从数据库加载到内存中 findCustomerByName 根据特定的客户姓名 把符合查询条件的Customer域对象从数据库加载到内存中 Java对象持久化技术概述 通过JDBCAPI来持久化实体域对象 续 JDBC编程的缺点实现业务逻辑的代码和数据库访问代码掺杂在一起 使程序结构不清晰 可读性差 在程序代码中嵌入面向关系的SQL语句 使开发人员不能完全运用面向对象的思维来编写程序 业务逻辑和关系数据模型绑定 如果关系数据模型发生变化 例如修改了CUSTOMERS表的结构 那么必须手工修改程序代码中所有相关的SQL语句 这增加了维护软件的难度 如果程序代码中的SQL语句包含语法错误 在编译时不能检查这种错误 只有在运行时才能发现这种错误 这增加了调试程序的难度 Java对象持久化技术概述 ORM简介对象 关系映射 Object RelationMapping 该模式指的是在单个组件中负责所有实体域对象的持久化 封装数据访问细节 如何实现持久化层 采用硬编码方式为每一种可能的数据库访问提供单独的方法 持久化层向业务逻辑层提供的API类似于如下 publicinterfacePersistenceManager publicvoidsaveCustomer Customercustomer publicListfindCustomerByName Stringname publicListfindCustomerByAge intage Java对象持久化技术概述 ORM简介如何实现持久化层 采用硬编码方式业务逻辑层的BusinessService类的saveCustomer 方法不必直接访问JDBCAPI 只需要通过PersistenceManager的saveCustomer 方法来保存Customer对象 存在以下不足持久化层产生大量冗余代码findCustomerByName findCustomerByAge 持化层缺乏弹性 需求变 持化层变 持化层同时与域模型和关系数据模型绑定 Java对象持久化技术概述 ORM简介如何实现持久化层 采用硬编码方式针对第一条 可以只需一个findCustomer Stringsql 方法 在方法内不组装SQL语句 但这时业务逻辑层必须负责生成SQL语句 因此业务逻辑层必须了解关系数据库的结构 显然没有做到分离 对于复杂的关系数据模型 直接通过JDBC编程来实现健壮的持久化层需要有高超的开发技巧 而且编程量很大 Java对象持久化技术概述 ORM简介如何实现持久化层 映射元数据 MappingMetaData 来描述对象 关系的映射细节 使得ORM中间件能在任何一个Java应用的业务逻辑层和数据库层之间充当桥梁 Java对象持久化技术概述 ORM简介对象 关系映射 Object RelationMapping 通过使用描述对象和数据库之间映射的元数据 实现程序对象到关系数据库数据的映射 是将Java程序中的对象自动持久化到关系数据库中 将对象与对象之间的关系对应到数据库表与表之间的关系的一种模式 Users类 domainobject privateintidprivateStringnameprivateStringpasswd Users表 Users某个对象users1id 2 name 吴用 passwd xxx Java对象持久化技术概述 ORM简介对象 关系映射 Object RelationMapping 注意 域模型与关系数据模型之间存在许多不匹配之处 如 Customer类有两个Address类型的属性 而在数据库中只有CUSTOMERS表 如何将Address类和Customer类映射到CUSTOMERS表 这正是ORM所要解决的 Java对象持久化技术概述 ORM简介对象 关系映射 Object RelationMapping 此外 域模型中类之间的多对多关联关系和继承关系都不能直接在关系数据模型中找到对应的等价物 在关系数据模型中 表之间只存在外键参照关系 因此 ORM中间件需要采用各种映射方案 来建立两种模型之间的映射关系 Java对象持久化技术概述 ORM简介对象 关系映射 Object RelationMapping 思考 ORM中间件如何保存Customer对象到表CUSTOMERS 以及如何从数据库中加载一个Customer对象 Java对象持久化技术概述 ORM简介ORM中间件的基本使用方法元数据通常采用XML格式 并且存放在专门的对象 关系映射文件 Java对象持久化技术概述 ORM简介ORM中间件的基本使用方法只要提供了持久化类与表的映射文件 ORM中间件在运行时就能参照映射文件的信息 把域对象持久化到数据库 以业务逻辑层BusinessService类的deleteCustomer 方法为类 Hibernate处理过程 publicvoiddeleteCustomer Customercustomer Sessionsession getSession session delete customer 1 运用Java反射机制 获得customer对象的类型为Customer class 2 参考对象 关系映射元数据 了解表间的关联 3 根据上述映射信息 生成SQL语句deletefromORDERSwhereCUSTOMER ID deletefromCUSTOMERSwhereID 4 通过JDBCAPI执行以上SQL语句 Java对象持久化技术概述 ORM简介常用的ORM中间件 Java对象持久化技术概述 HibernateAPI简介应用程序可以直接通过HibernateAPI访问数据库 HibernateAPI中的接口可分为以下几类 数据库操作 增 删 改 查 接口 包括Session Transaction Query接口 配置Hibernate接口 Configuration 应用程序拦截内部发生的事件 并作出相关的回应 这些接口包括 Interceptor LoadEventListener SaveEventListener接口等 可扩展的Hibernate接口 包括UserType CompositeUserType IdentifierGenerator接口 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Configuration接口负责解析Hibernate的配置文件和映射文件中的信息和管理Hibernate的配置信息 Hibernate运行时需要一些底层实现的基本信息 这些信息包括 数据库URL 数据库用户名 数据库用户密码 数据库JDBC驱动类 数据库dialect 用于对特定数据库提供支持 这些属性在Hibernate配置文件hibernate cfg xml中加以设定 当调用 Configurationconfig newConfiguration configure Hibernate会自动在目录下搜索hibernate cfg xml文件 并将其读取到内存中作为后续操作的基础配置 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 SessionFactory接口负责初始化Hibernate 它充当数据存储源的代理 并负责创建Session实例 可以通过Configuration实例构建SessionFactory Configurationconfig newConfiguration configure SessionFactorysessionFactory config buildSessionFactory Configuration实例config会根据当前的数据库配置信息 构造SessionFacory实例 并被赋予特定的配置信息 之后config的任何变更不会影响到已经创建的sessionFactory Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 SessionFactory接口构造SessionFactory很消耗资源 一个应用中只初始化一个SessionFactory 为不同的线程提供Session SessionFactory是线程安全的 可以被多个线程调用 SessionFactory实例还有另外的一个含义 它还代表一个要访问的数据库 如果在一个应用中需要访问多个数据库的话 那么就需要根据不同的配置文件创建多个Configuration实例并构建每个数据库相关的SessionFactory实例 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口Session接口是Java应用程序和Hibernate进行交互时所使用的主要接口 这也是持久化操作的核心API 持久化对象的生命周期 事务的管理和持久化对象的查询 更新和删除都是通过Session对象来完成的 Session主要的功能是读取 创建和删除映射对象的实例 这一系列的操作将被转换为对数据库表中的增加 修改 查询和删除操作 Hibernate在操作数据库之前必须先取得Session对象 相当于JDBC在操作数据库之前必须先取得Connection对象一样 创建Session实例可以采用以下代码来实现 Configurationcof newConfiguration config SessionFactorysessionFactory cof buildSessionFactory Sessionsession sessionFactory openSession Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口Session对象所包含的典型方法有以下几个 save 方法用来完成瞬态对象实例的持久化操作 相当于持久化数据库的insert语句 将一个PO对象的属性取出放入PreparedStatement语句中 然后向数据库表中插入一条记录 或者多条记录 如有级联关系 Sessionsession HibernateSessionFactory getSession 创建事务对象Transactionts session beginTransaction Kcbkc newKcb 创建POJO类对象kc setKch 198 设置课程号kc setKcm JavaEE 设置课程名kc setKxxq newShort short 5 设置开学学期kc setXf newInteger 3 设置学分kc setXs newInteger 48 设置学时 保存对象session save kc mit Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口Session对象所包含的典型方法有以下几个 update 方法根据对象实例的标识符来更新持久化对象实例所对应的数据 相当于执行数据库的update语句 也就是根据标识符或者表中的主键字段来更新实体对象所对应的数据库中的记录 Kcbkc newKcb kc Kcb session get Kcb class 198 kc setKcm datastructure session update kc 更新脱管对象 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口Session对象所包含的典型方法有以下几个 saveOrUpdate 方法兼具save 和update 方法的功能 对于传入的对象 saveOrUpdate 方法首先判断该对象是脱管对象还是临时对象 然后调用合适的方法 Kcbkc newKcb kc setId 66 为对象设定一个id值session saveOrUpdate ui 使用方法保存数据session close 关闭Session Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口通常下面的场景会使用update 或saveOrUpdate 程序在第一个session中加载对象 接着把session关闭 该对象被传递到表现层 对象发生了一些改动 该对象被返回到业务逻辑层最终到持久层 程序创建第二session调用第二个session的update 方法持久这些改动 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口Session对象所包含的典型方法有以下几个 delete 方法删除该实例对象满足条件的所有数据库的记录 相当于执行数据库的delete语句 包括持久对象和脱管对象 Kcbkc newKcb Sessionsession sf openSession 打开SessionTransactiontx session beginTransaction 开启事务kc Kcb session get Kcb newInteger 66 session delete ui 删除持久对象mit 提交事务session close 关闭Session Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口注意 使用delete 方法删除对象时 会有一些性能上的问题 例如从以上代码中可以看出 当删除一个对象时 先调用get 方法加载这个对象 然后调用delete 方法删除对象 但此方法发送了一条select语句和一条delete语句 实际上select语句是不必要的 这种情况在批量删除时尤其明显 为了解决批量删除的性能问题 常用的办法是使用批量删除操作 Kcbkc newKcb Sessionsession sf openSession 打开SessionTransactiontx session beginTransaction 开启事务Queryq session createQuery deletefromKcb 使用HQL语句进行删除q executeUpdate 删除对象mit 提交事务session close 关闭Session Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口Session对象所包含的典型方法有以下几个 contains 方法用于判断一个实体对象是否与当前的Session对象相关联 这个方法可以用来判断一个实体对象是否处于Persistent状态 get 方法通过标识符得到指定类的持久化对象的实例 通过get 方法只能得到唯一的一个持久化对象 该对象如果不存在 那么返回空值 publicObjectget ClassclassName Serializableid className是类的类型 id是对象的主键值 如果id的类型是int 可通过newInteger id 的方法生成一个Integer对象 例如 Kcbkc Kcb session get Kcb class newInteger 66 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口Session对象所包含的典型方法有以下几个 load 方法通过标识符得到指定类的持久化对象的实例 这个方法与get 方法的区别是应该确保所有要得到的持久化对象的实例存在 否则 将会产生异常信息 例如 Kcbkc Kcb session load Kcb class newInteger 66 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口get 方法和load 方法的区别如下 1 在立即加载PO对象时 当Hibernate在从数据库中取得数据组装好一个对象后 会立即再从数据库取得数据组装此对象所关联的对象 如果对象存在 get 方法和load 方法没有区别 它们都可取得已初始化的对象 但如果当对象不存在且是立即加载时 使用get 方法则返回null 而使用load 方法则弹出一个异常 因此使用load 方法时 要确认查询的主键id一定是存在的 从这一点来讲 它没有get 方法方便 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Session接口get 方法和load 方法的区别如下 2 在延迟加载对象时 在Hibernate从数据库中取得数据组装好一个对象后 不会立即再从数据库取得数据组装此对象所关联的对象 而是等到需要时 才会从数据库取得数据组装此关联对象 get 方法仍然使用立即加载的方式发送SQL语句 并得到已初始化的对象 而load 方法则根本不发送SQL语句 它返回一个代理对象 直到这个对象被访问使用时才被初始化 Java对象持久化技术概述 HibernateAPI简介对象状态Hibernate的PO对象有三种状态 瞬时态 持久态 脱管态 瞬时态 transient 由new命令刚生成且与session没有关联的Java对象就处于瞬时态Kcbkc newKcb 瞬时对象在内存中是孤立存在 数据库中没有数据与之对应 超过作用域会被JVM垃圾回收器回收在Hibernate中 可通过session的save 或saveOrUpdate 方法将数据插入数据库中 瞬时对象与数据库相关联 此时该临时对象转变成持久化对象 持久 persistent 数据库中有数据与之对应 当前与session有关联 并且相关联的session没有关闭 持久对象状态发生改变 在事务提交时会影响到数据库持久对象具有如下特点 1 和session实例关联 2 在数据库中有与之关联的记录 当session执行delete 方法 对应的持久对象变成瞬时态 数据库中的对应数据已被删除 该对象不再与数据库的记录关联当session执行close 或clear evict 之后 持久对象变成脱管对象 该对象虽然具有数据库识别值 但已不在Hibernate持久层的管理之下 对象状态 脱管 detached 数据库中有数据与之对应 但当前没有session与之关联 托管对象状态发生改变 hibernate不能检测到当脱管对象被重新关联到session上时 并再次转变成持久对象 脱管对象拥有数据库的识别值 可通过update saveOrUpdate 等方法 转变成持久对象 脱管对象具有如下特点 本质上与临时对象相同 在没有任何变量引用它时 JVM会在适当的时候将它回收 比临时对象多了一个数据库记录标识值 对象状态 对象状态 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Transaction接口主要是用于管理事务 用户可以使用Transaction对象定义组件的原子操作 通过Session对象的beginTransaction 方法可以得到一个Transaction对象的实例 当在结束持久化操作后 调用ransaction对象的commit 方法和rollback 方法也是必不可少的 try Transactionran session beginTransaction session save users mit catch Exceptione tran rollback throwe finally session close Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Query接口Hibernate具有三种检索方式 分别是HQL检索方式 QBC检索方式和SQL检索方式 其中HQL是面向对象的查询语句 它和SQL查询语言有些相似 对比这三种检索方式 HQL检索方式被应用的最为广泛 它主要具有以下功能 Java对象持久化技术概述 HibernateAPI简介Hibernate核心接口 Query接口Queryquery session createQuery fromKcbwherekch 198 通常 采用动态赋值方式 形成Query对象 Queryquery session createQuery fromKcbwherekch 就要在后面设置其值 Query setString 0 要设置的值 Query有一个list 方法 用于取得一个List集合 Queryquery session createQuery fromKcbwherekch 198 Listlist query list 第一个Hibernate应用 在Java应用中使用Hibernate包含以下步骤 创建数据库表创建Hibernate的配置文件创建持久化类创建对象 关系映射文件通过HibernateAPI编写访问数据库的代码 第一个Hibernate应用 在Java应用中使用Hibernate包含以下步骤 创建数据库表创建Hibernate的配置文件创建持久化类创建对象 关系映射文件通过HibernateAPI编写访问数据库的代码 hibernate开发方式的三种方式 1由Domainobject mapping db 官方推荐 2由DB开始 用工具生成mapping和Domainobject 使用较多 3由映射文件开始 Hibernate应用实例开发 Test java测试类 Customers java这是一个POJO类 javabean domain与CUSTOMERS表对应 数据持久层 Hibernate框架 1 hibernate cfg xml 配置文件 2 Customers hbm xml 对象映射文件 3 hibernatecore库 api 数据库 第一个Hibernate应用 在MyEclipse中创建对数据库的连接启动MyEclipse 选择 Window OpenPerspective MyEclipseDatabaseExplorer 菜单项 打开MyEclipseDatabase浏览器 右击菜单 如图1所示 选择 New 菜单项 出现如图2所示的对话框 编辑数据库连接驱动 第一个Hibernate应用 在MyEclipse中创建对数据库的连接编辑完成以后 在MyEclipseDatabase浏览器中 右击刚才创建的htdb数据库连接 选择 Openconnection 菜单项 打开名为 hibernate 的数据连接 如图3所示 第一个Hibernate应用 创建Web项目以及添加Hibernate右击项目名myhibernate 选择 MyEclipse AddHibernateCapabilites 菜单项 出现如图4所示的对话框 选择Hibernate框架应用版本及所需要的类库 第一个Hibernate应用 创建Web项目以及添加Hibernate单击 Next 进入图5所示界面 创建Hibernate配置文件hibernate cfg xml 将该文件放在src文件夹下单击 Next 进入图6所示界面 指定Hibernate数据库连接细节 由于前面已经配置MyConn的数据库连接 这里只需要选择DBDriver为 hibernate 即可 第一个Hibernate应用 创建Web项目以及添加Hibernate单击 Next 出现图7界面 Hibernate中有一个与数据库打交道重要的类Session 这个类是由工厂SessionFactory创建的 这个界面询问是否需要创建SessionFactory类 如果需要创建 还需要指定创建的位置和类名 单击 Finish 按钮 完成Hibernate的配置 第一个Hibernate应用 生成数据库表对应的Java类对象和映射文件在MyEclispse下创建一个名为 com zhang model 的包 这个包将用来存放与数据库表对应的Java类POJO 打开MyEclipseDatabaseExplorer视图 打开MyConn数据连接 选择hibernateTest dbo TABLE 菜单项 右击CUSTOMERS表 选择 HibernateReverseEngineering 菜单项 如图8所示 将启动HibernateReverseEngineering向导 该向导用于完成从已有的数据库表生成对应的Java类和相关映像文件的配置工作 第一个Hibernate应用 生成数据库表对应的Java类对象和映射文件选择生成的Java类和映像文件所在的位置 如图9所示 POJO是简单的Java对象 其中有一些属性及getter setter方法 当然 如果有一个简单的运算属性也是可以的 但不允许有业务方法单击 Next 按钮 进入如图10所示的界面 选择主键生成策略 第一个Hibernate应用 配置Customers类的映射文件Customers hbm xml到hibernate cfg xml 第一个Hibe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大专基础会计试题及答案
- 基础试题及答案大全
- 城市旧供水管网改造工程经济效益和社会效益分析报告
- 焊丝生产制造项目规划设计方案
- 普通房屋租赁合同的范文7篇
- 净身出户离婚协议书起草与财产分割执行指导
- 离婚财产分配与债务处理专项协议书
- 住宅小区物业服务权移交及配套设施合同
- 生活垃圾分类收集转运体系建设项目可行性研究报告
- 风电场效能提升改造项目可行性研究报告
- 超早期脑梗死的CT影像表现及诊断课件
- 拉西地平原料制药课程设计说明书
- 小学体育-小学二年级《单双脚跳》教学设计学情分析教材分析课后反思
- 居室环境的清洁与消毒
- ××领导班子及成员分析研判报告
- GB/T 9124.1-2019钢制管法兰第1部分:PN系列
- GB/T 2518-2008连续热镀锌钢板及钢带
- Frenchay构音障碍评定
- 教育学原理课后答案主编项贤明
- 建筑装饰施工技术-轻质隔墙工程施工课件(-)
- 语言领域核心经验《学前儿童语言学习与发展核心经验》
评论
0/150
提交评论