版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> Understanding object/relational persistence</p><p> The approach to managing persistent data has been a key design decision in every software project we’ve worked on. Given that persistent data i
2、sn’t a new or unusual requirement for Java applications, you’d expect to be able to make a simple choice among similar, well-established persistence solutions. Think of web application frameworks (Jakarta Struts versus W
3、ebWork), GUI component frameworks (Swing versus SWT), or template engines (JSP versus Velocity). Each of the competing solutions has adva</p><p> For several years, persistence has been a hot topic of debat
4、e in the Java community.Many developers don’t even agree on the scope of the problem. Is “persistence” a problem that is already solved by relational technology and extensions such as stored procedures, or is it a more p
5、ervasive problem that must be addressed by special Java component models such as EJB entity beans? Should we hand-code even the most primitive CRUD (create, read, update, delete) operations in SQL and JDBC, or should thi
6、</p><p> Hibernate is an open source ORM implementation.Hibernate is an ambitious project that aims to be a complete solution to the problem of managing persistent data in Java. It mediates the application’
7、s interaction with a relational database, leaving the developer free to concentrate on the business problem at hand. Hibernate is an non-intrusive solution. By this we mean you aren’t required to follow many Hibernate-sp
8、ecific rules and design patterns when writing your business logic and persistent cl</p><p> This article is about Hibernate. We’ll cover basic and advanced features and describe some recommended ways to dev
9、elop new applications using Hibernate.Often, these recommendations won’t be specific to Hibernate—sometimes they will be our ideas about the best ways to do things when working with persistent data, explained in the cont
10、ext of Hibernate. Before we can get started with Hibernate,however, you need to understand the core problems of object persistence and object/relational mapping. This</p><p> First, we define persistent dat
11、a management in the context of object-oriented applications and discuss the relationship of SQL, JDBC, and Java, the underlying technologies and standards that Hibernate is built on. We then discuss the socalled object/r
12、elational paradigm mismatch and the generic problems we encounter in object-oriented software development with relational databases. As this list of problems grows, it becomes apparent that we need tools and patterns to
13、minimize the</p><p> time we have to spend on the persistence-related code of our applications. After we look at alternative tools and persistence mechanisms, you’ll see that ORM is the best available solut
14、ion for many scenarios. Our discussion of the advantages and drawbacks of ORM gives you the full background to make the best decision when picking a persistence solution for your own project.</p><p> What i
15、s persistence?</p><p> Almost all applications require persistent data. Persistence is one of the fundamental concepts in application development. If an information system didn’t preserve data entered by us
16、ers when the host machine was powered off, the system would be of little practical use. When we talk about persistence in Java, we’re normally talking about storing data in a relational database using SQL. We start by ta
17、king a brief look at the technology and how we use it with Java. Armed with that information, we </p><p> Relational databases</p><p> You, like most other developers, have probably worked wit
18、h a relational database.In fact, most of us use a relational database every day. Relational technology is a known quantity. This alone is sufficient reason for many organizations to choose it. But to say only this is to
19、pay less respect than is due. Relational databases are so entrenched not by accident but because they’re an incredibly flexible and robust approach to data management.</p><p> A relational database manageme
20、nt system isn’t specific to Java, and a relational database isn’t specific to a particular application. Relational technology provides a way of sharing data among different applications or among different technologies th
21、at form part of the same application (the transactional engine and the reporting engine, for example). Relational technology is a common denominator of many disparate systems and technology platforms. Hence, the relation
22、al data model is often the com</p><p> Understanding SQL</p><p> To use Hibernate effectively, a solid understanding of the relational model and SQL is a prerequisite. You’ll need to use your
23、knowledge of SQL to tune the performance of your Hibernate application. Hibernate will automate many repetitive coding tasks, but your knowledge of persistence technology must extend beyond Hibernate itself if you want t
24、ake advantage of the full power of modern SQL databases.Remember that the underlying goal is robust, efficient management of persistent data.Let’s review</p><p> Also read An Introduction to Database System
25、s [Date 2004] for the theory, concepts, and ideals of (relational) database systems. Although the relational database is one part of ORM, the other part, of course, consists of the objects in your Java application that n
26、eed to be persisted to the database using SQL.</p><p> Using SQL in Java</p><p> When you work with an SQL database in a Java application, the Java code issues SQL statements to the database v
27、ia the Java DataBase Connectivity (JDBC) API. The SQL itself might have been written by hand and embedded in the Java code, or it might have been generated on the fly by Java code. You use the JDBC API to bind arguments
28、to query parameters, initiate execution of the query, scroll through the query result table, retrieve values from the result set, and so on. These are lowlevel data acce</p><p> Persistence in object-orient
29、ed applications</p><p> In an object-oriented application, persistence allows an object to outlive the process that created it. The state of the object may be stored to disk and an object with the same stat
30、e re-created at some point in the future.This application isn’t limited to single objects—entire graphs of interconnected objects may be made persistent and later re-created in a new process. Most objects aren’t persiste
31、nt; a transient object has a limited lifetime that is bounded by the life of the process that inst</p><p> responsible for sharing data between multiple users and multiple applications. A database managemen
32、t system also provides data-level security. When we discuss persistence in this book, we’re thinking of all these things:</p><p> ■ Storage, organization, and retrieval of structured data</p><p&g
33、t; ■ Concurrency and data integrity</p><p> ■ Data sharing</p><p> In particular, we’re thinking of these problems in the context of an object-oriented application that uses a domain model.An
34、 application with a domain model doesn’t work directly with the tabular representation of the business entities; the application has its own, object-oriented model of the business entities. If the database has ITEM and B
35、ID tables, the Java application defines Item and Bid classes.Then, instead of directly working with the rows and columns of an SQL result set, the business </p><p> relational model. Let’s take a closer loo
36、k.</p><p> 理解對(duì)象-關(guān)系持續(xù)性</p><p> 我們工作的每個(gè)軟件項(xiàng)目工程中,管理持續(xù)性數(shù)據(jù)的方法已經(jīng)成為一項(xiàng)關(guān)鍵的設(shè)計(jì)決定。對(duì)于Java應(yīng)用,持續(xù)性數(shù)據(jù)并不是一個(gè)新的或不尋常的需求,你也許曾經(jīng)期望能夠在許多相似的,已被很好構(gòu)建的持續(xù)性解決方案中簡(jiǎn)單地進(jìn)行選擇??紤]一下Web應(yīng)用框架(Jakarta Struts 對(duì) WebWork),GUI組件框架(Swing 對(duì) S
37、WT),或模版工具(JSP 對(duì) Velocity)。每一種相互競(jìng)爭(zhēng)的解決方案都有其優(yōu)缺點(diǎn),但它們至少都共享了相同的范圍與總體的方法。不幸的是,這還不是持續(xù)性技術(shù)的情形,對(duì)持續(xù)性技術(shù)相同的問題有許多不同的混亂的解決方案。</p><p> 在過去的幾年里,持續(xù)性已經(jīng)成為Java社區(qū)里一個(gè)爭(zhēng)論的熱點(diǎn)話題。對(duì)這個(gè)問題的范圍許多開發(fā)者的意見甚至還不一致。持續(xù)性還是一個(gè)問題嗎?它早已被關(guān)系技術(shù)與其擴(kuò)展例如存儲(chǔ)過程解決了。
38、或者它是一個(gè)更一般的問題,必須使用特殊的Java組件模型例如EJB實(shí)體Bean來處理?甚至SQL和JDBC中最基本的CRUD(create, read, update, delete)操作也需要進(jìn)行手工編碼,還是讓這些工作自動(dòng)化?如果每一種數(shù)據(jù)庫(kù)管理系統(tǒng)都有它自己的方言,我們?nèi)绾芜_(dá)到可移植性?我們應(yīng)該完全放棄SQL并采用一種新的數(shù)據(jù)庫(kù)技術(shù),例如面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)嗎?爭(zhēng)論仍在繼續(xù),但是最近一種稱作對(duì)象-關(guān)系映射(ORM)的解決方案逐漸地被
39、接受。Hibernate就是這樣一種開源的ORM實(shí)現(xiàn)。</p><p> Hibernate是一個(gè)雄心勃勃的項(xiàng)目,它的目標(biāo)是成為Java中管理持續(xù)性數(shù)據(jù)問題的一種完整的解決方案。它協(xié)調(diào)應(yīng)用與關(guān)系數(shù)據(jù)庫(kù)的交互,讓開發(fā)者解放出來專注于手中的業(yè)務(wù)問題。Hibernate是一種非強(qiáng)迫性的解決方案。我們的意思是指在寫業(yè)務(wù)邏輯與持續(xù)性類時(shí),你不會(huì)被要求遵循許多Hibernate特定的規(guī)則和設(shè)計(jì)模式。這樣,Hibernate
40、就可以與大多數(shù)新的和現(xiàn)有的應(yīng)用平穩(wěn)地集成,而不需要對(duì)應(yīng)用的其余部分作破壞性的改動(dòng)。</p><p> 本篇文章是關(guān)于Hibernate的。我們包含了基本與高級(jí)的特征,并且描述了許多使用Hibernate開發(fā)新應(yīng)用時(shí)的推薦方式。通常這些推薦并不特定于Hibernate——有時(shí)它們可能是我們關(guān)于使用持續(xù)性數(shù)據(jù)工作時(shí)處理事情的最佳方式的一些想法,只不過在Hibernate的環(huán)境中進(jìn)行了介紹。然而,在我們可以開始使用H
41、ibernate之前,你需要理解對(duì)象持續(xù)性和對(duì)象-關(guān)系映射的核心問題。本章解釋了為什么像Hibernate這樣的工具是必需的。</p><p> 首先,我們定義了在面向?qū)ο蟮膽?yīng)用環(huán)境中持續(xù)性數(shù)據(jù)的管理,并且討論了SQL,JDBC和Java的關(guān)系,Hibernate就是在這些基礎(chǔ)的技術(shù)與標(biāo)準(zhǔn)之上構(gòu)建的。然后我們討論了所謂的對(duì)象-關(guān)系范例不匹配的問題和使用關(guān)系數(shù)據(jù)庫(kù)進(jìn)行面向?qū)ο蟮能浖_發(fā)中所遇到的一些一般性的問題。
42、隨著這個(gè)問題列表的增長(zhǎng),我們需要一些工具與模式來最小化我們用在與持續(xù)性有關(guān)的代碼上的時(shí)間就變得很明顯了。在我們查看了可選的工具和持續(xù)性機(jī)制后,你會(huì)發(fā)現(xiàn)ORM在許多情況下可能是最好的解決方案。我們關(guān)于ORM的優(yōu)缺點(diǎn)的討論給了你一個(gè)完整的背景,在你為自己的項(xiàng)目選擇持續(xù)性解決方案時(shí)可以作出最好的決定。</p><p><b> 什么是持續(xù)性?</b></p><p>
43、幾乎所有的應(yīng)用都需要持續(xù)性數(shù)據(jù)。持續(xù)性在應(yīng)用開發(fā)中是一個(gè)基本的概念。如果當(dāng)主機(jī)停電時(shí)一個(gè)信息系統(tǒng)沒有保存用戶輸入的數(shù)據(jù),這樣的系統(tǒng)幾乎沒有實(shí)際的用途。當(dāng)我們討論Java中的持續(xù)性時(shí),我們通常是指使用SQL存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)。我們從簡(jiǎn)單地查看一下這項(xiàng)技術(shù)和我們?nèi)绾卧贘ava中使用它開始。具有了這些知識(shí)之后,我們繼續(xù)關(guān)于持續(xù)性的討論以及如何在面向?qū)ο蟮膽?yīng)用中實(shí)現(xiàn)它。</p><p><b> 關(guān)系數(shù)
44、據(jù)庫(kù)</b></p><p> 你,像許多其他的開發(fā)者,很可能在使用一個(gè)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行工作。實(shí)際上,我們中的大多數(shù)每天都在使用關(guān)系數(shù)據(jù)庫(kù)。關(guān)系技術(shù)是一個(gè)已知數(shù)。僅此一點(diǎn)就是許多組織選擇它的一個(gè)充分的理由。但僅僅這樣說就有點(diǎn)欠考慮了。關(guān)系數(shù)據(jù)庫(kù)如此不易改變不是因?yàn)榕既坏脑蚨且驗(yàn)樗鼈兡橇钊穗y以置信的靈活與健壯的數(shù)據(jù)管理方法。</p><p> 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)既不特定于J
45、ava,也不特定于特殊的應(yīng)用。關(guān)系技術(shù)提供了一種在不同的應(yīng)用或者相同應(yīng)用的不同技術(shù)(例如事務(wù)工具與報(bào)表工具)之間共享數(shù)據(jù)的方式。關(guān)系技術(shù)是多種不同的系統(tǒng)與技術(shù)平臺(tái)之間的一個(gè)共同特征。因此,關(guān)系數(shù)據(jù)模型通常是業(yè)務(wù)實(shí)體共同的企業(yè)級(jí)表示。關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)具有基于SQL的應(yīng)用編程接口,因此我們稱今天的關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品為SQL數(shù)據(jù)庫(kù)管理系統(tǒng),或者當(dāng)我們討論特定系統(tǒng)時(shí),稱之為SQL數(shù)據(jù)庫(kù)。</p><p><b>
46、 理解SQL</b></p><p> 為了有效地使用Hibernate,對(duì)關(guān)系模型和SQL扎實(shí)的理解是前提條件。你需要用你的SQL知識(shí)來調(diào)節(jié)你的Hibernate應(yīng)用的性能。Hibernate會(huì)自動(dòng)化許多重復(fù)的編碼任務(wù),如果你想利用現(xiàn)代SQL數(shù)據(jù)庫(kù)的全部能力,你的持續(xù)性技術(shù)的知識(shí)必須擴(kuò)充至超過Hibernate本身。記住基本目標(biāo)是健壯地有效地管理持續(xù)性數(shù)據(jù)。</p><p&g
47、t; 讓我們回顧一些本書中用到的SQL術(shù)語(yǔ)。你使用SQL作為數(shù)據(jù)定義語(yǔ)言(DDL)通過CREATE與ALTER命令來創(chuàng)建數(shù)據(jù)庫(kù)模式。創(chuàng)建了表(索引,序列等等)之后,你又將SQL作為數(shù)據(jù)處理語(yǔ)言(DML)來使用。使用DML,你執(zhí)行SQL操作來處理與取出數(shù)據(jù)。處理操作包括插入,更新和刪除。你使用約束,投射,和連接操作(包括笛卡爾積)執(zhí)行查詢來取出數(shù)據(jù)。為了有效地生成報(bào)表,你以任意的方式使用SQL來分組,排序和合計(jì)數(shù)據(jù)。你甚至可以相互嵌套S
48、QL命令,這項(xiàng)技術(shù)被稱作子查詢。你也許已經(jīng)使用了多年的SQL并且非常熟悉用它編寫的基本操作和命令。盡管如此,我們的經(jīng)驗(yàn)還是告訴我們SQL有時(shí)難于記憶并且有些術(shù)語(yǔ)有不同的用法。為了理解本書,我們不得不使用相同的術(shù)語(yǔ)與概念;因此,如果我們提到的任何術(shù)語(yǔ)是新出</p><p> 現(xiàn)的或者是不清楚的。 為了進(jìn)行健全的Java數(shù)據(jù)庫(kù)應(yīng)用開發(fā),SQL知識(shí)是強(qiáng)制的。如果你需要更多的資料,找一本Dan Tow的優(yōu)秀著作《SQL
49、 Tuning》。同時(shí)讀一下《An Introduction to Database Systems》,學(xué)習(xí)一些(關(guān)系)數(shù)據(jù)庫(kù)系統(tǒng)的理論,概念和思想。關(guān)系數(shù)據(jù)庫(kù)是ORM的一部分,當(dāng)然另一部分由你的Java應(yīng)用中的對(duì)象構(gòu)成,它們需要使用SQL被持續(xù)化到數(shù)據(jù)庫(kù)中。</p><p> 在Java中使用SQL</p><p> 當(dāng)你在Java應(yīng)用中使用SQL工作時(shí),Java代碼通過Java數(shù)據(jù)
50、庫(kù)連接(JDBC)執(zhí)行SQL命令來操作數(shù)據(jù)庫(kù)。SQL可能被手工編碼并嵌入到Java代碼中,或者可能被匆忙地通過Java代碼生成。你使用JDBC API將變量綁定到查詢參數(shù)上,開始執(zhí)行查詢,在查詢結(jié)果表上滾動(dòng),從結(jié)果集中取出值,等等。這些都是底層的數(shù)據(jù)訪問任務(wù),作為應(yīng)用開發(fā)者,我們對(duì)需要這些數(shù)據(jù)訪問的業(yè)務(wù)問題更加感興趣。需要我們自己來關(guān)心這些單調(diào)的機(jī)械的細(xì)節(jié),好像并不是確定無疑的。</p><p> 我們真正想做
51、的是能夠編寫保存和取出復(fù)雜對(duì)象(我們的類實(shí)例)的代碼—從數(shù)據(jù)庫(kù)中取出或者保存到數(shù)據(jù)庫(kù)中,盡量為我們減少這些底層的苦差事。因?yàn)檫@些數(shù)據(jù)訪問任務(wù)通常都是非常單調(diào)的,我們不禁要問:關(guān)系數(shù)據(jù)模型特別是SQL是面向?qū)ο蟮膽?yīng)用中持續(xù)性問題的正確選擇嗎?我們可以立即回答這個(gè)問題:是的!有許多原因使SQL數(shù)據(jù)庫(kù)支配了計(jì)算行業(yè)。關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)是唯一被證明了的數(shù)據(jù)管理技術(shù)并且?guī)缀踉谌魏蜫ava項(xiàng)目中都是一項(xiàng)需求。</p><p>
52、; 然而,在過去的15年里,開發(fā)者一直在討論范例不匹配的問題。這種不匹配解釋了為什么每個(gè)企業(yè)項(xiàng)目都需要在持續(xù)性相關(guān)的問題上付出如此巨大的努力。這里所說的范例是指對(duì)象模型和關(guān)系模型,或者可能是面向?qū)ο缶幊膛cSQL。讓我們通過詢問在面向?qū)ο蟮膽?yīng)用開發(fā)環(huán)境中,持續(xù)性究竟意味著什么,來開始我們對(duì)不匹配問題的探究。首先,我們將本章開始部分聲明的對(duì)持續(xù)性過分簡(jiǎn)單的定義擴(kuò)展到一個(gè)較寬的范圍,更成熟的理解包括維護(hù)與使用持續(xù)性數(shù)據(jù)。</p>
53、<p> 面向?qū)ο髴?yīng)用中的持續(xù)性</p><p> 在面向?qū)ο蟮膽?yīng)用中,持續(xù)性允許一個(gè)對(duì)象的壽命可以超過創(chuàng)建它的程序。這個(gè)對(duì)象的狀態(tài)可能被存儲(chǔ)到磁盤上,并且在將來的某一時(shí)刻相同狀態(tài)的對(duì)象可以被重新創(chuàng)建。這樣的應(yīng)用不僅僅限于簡(jiǎn)單的對(duì)象——關(guān)聯(lián)對(duì)象的完整圖形也可以被持續(xù)化并且以后可以在新的進(jìn)程里被重新創(chuàng)建。大多數(shù)對(duì)象并不是持續(xù)性的;暫態(tài)對(duì)象只有有限的壽命,被實(shí)例化它的進(jìn)程的壽命所限定。幾乎所有的Ja
54、va應(yīng)用都在混合使用持續(xù)與暫態(tài)對(duì)象;因此,我們需要一個(gè)子系統(tǒng)來管理我們的持續(xù)性數(shù)據(jù)。現(xiàn)代的關(guān)系數(shù)據(jù)庫(kù)為持續(xù)性數(shù)據(jù)提供了一種結(jié)構(gòu)化的表示方法,允許排序,檢索和合計(jì)數(shù)據(jù)。數(shù)據(jù)庫(kù)管理系統(tǒng)負(fù)責(zé)管理并發(fā)性和數(shù)據(jù)的完整性;它們負(fù)責(zé)在多個(gè)用戶和多個(gè)應(yīng)用之間共享數(shù)據(jù)。數(shù)據(jù)庫(kù)管理系統(tǒng)也提供了數(shù)據(jù)級(jí)別的安全性。當(dāng)我們?cè)诒緯杏懻摮掷m(xù)性時(shí),我們考慮以下這些事情:</p><p> ■ 存儲(chǔ),組織與恢復(fù)結(jié)構(gòu)化數(shù)據(jù)</p>
55、<p> ■ 并發(fā)性與數(shù)據(jù)完整性</p><p><b> ■ 數(shù)據(jù)共享</b></p><p> 特別地,我們將在使用域模型的面向?qū)ο蟮膽?yīng)用環(huán)境中考慮這些問題。使用域模型的應(yīng)用并不直接使用業(yè)務(wù)實(shí)體的扁平表示進(jìn)行工作,這些應(yīng)用有它們自己的面向?qū)ο蟮臉I(yè)務(wù)實(shí)體模型。如果數(shù)據(jù)庫(kù)中有“項(xiàng)目”與“競(jìng)價(jià)”表,則在這些Java應(yīng)用中會(huì)定義“項(xiàng)目”與“競(jìng)價(jià)”類。&l
56、t;/p><p> 然后,業(yè)務(wù)邏輯并不直接在SQL結(jié)果集的行與列上進(jìn)行工作,而是與面向?qū)ο蟮挠蚰P瓦M(jìn)行交互,域模型在運(yùn)行時(shí)表現(xiàn)為一個(gè)關(guān)聯(lián)對(duì)象的交互圖。業(yè)務(wù)邏輯從不在數(shù)據(jù)庫(kù)中(作為SQL存儲(chǔ)過程)執(zhí)行,而是被實(shí)現(xiàn)在Java程序中。這就允許業(yè)務(wù)邏輯使用成熟的面向?qū)ο蟮母拍?,例如繼承與多態(tài)。我們可以使用眾所周知的設(shè)計(jì)模式例如“策略”,“中介者”和“組合” ,所有這些模式都依賴于多態(tài)方法調(diào)用?,F(xiàn)在給你一個(gè)警告:并不是所有的
57、Java應(yīng)用都是按照這種方式設(shè)計(jì)的,并且也不打算是。對(duì)于簡(jiǎn)單的應(yīng)用不使用域模型可能會(huì)更好。SQL和JDBC API可以完美地處理純扁平數(shù)據(jù),并且現(xiàn)在新的JDBC結(jié)果集已經(jīng)使CRUD操作變得更簡(jiǎn)單了。使用持續(xù)性數(shù)據(jù)的扁平表示進(jìn)行工作可能更直接并且更容易理解。</p><p> 然而,對(duì)于含有復(fù)雜業(yè)務(wù)邏輯的應(yīng)用,域模型有助于有效地提高代碼的可重用性和可維護(hù)性。在本書中我們集中在使用域模型的應(yīng)用上,因?yàn)橥ǔiber
58、nate和ORM總是與這種類型的應(yīng)用有關(guān)。如果我們?cè)俅慰紤]SQL和關(guān)系數(shù)據(jù)庫(kù),我們最終會(huì)發(fā)現(xiàn)這兩種范例的不匹配之處。</p><p> SQL操作例如投射與連接經(jīng)常會(huì)導(dǎo)致對(duì)結(jié)果數(shù)據(jù)的扁平表示。這與在Java應(yīng)用中用來執(zhí)行業(yè)務(wù)邏輯的關(guān)聯(lián)對(duì)象的表示完全不同!這是根本不同的模型,而不僅僅是相同模型的不同的顯示方式。</p><p> 帶著這些認(rèn)識(shí),我們能夠開始看一下這些問題——許多已經(jīng)很好理
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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)論