版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Hibernate程序設(shè)計第一講Hibernate概述第二講對象關(guān)系映射基礎(chǔ)第三講復(fù)雜實體映射第四講關(guān)聯(lián)映射第五講Hibernate查詢Hibernate 程序設(shè)計第一講 Hibernate 概述DAO模式的不足 SQL語句出現(xiàn)在程序中,不利于維護、移植; 與java倡導(dǎo)的面向?qū)ο蟮脑瓌t相違背; 重復(fù)同類編碼; 開發(fā)人員需要處理底層代碼如建立、斷開數(shù)據(jù)庫連接等;O/R Mapping 對象-關(guān)系映射就是Java應(yīng)用中的對象到關(guān)系數(shù)據(jù)庫中的表的自動的和透明的持久化,使用元數(shù)據(jù)meta data描述對象與數(shù)據(jù)庫間的映射。本質(zhì)上,ORM的工作是將數(shù)據(jù)從一種表示轉(zhuǎn)換為另一種。對象關(guān)系映射的優(yōu)點 提高生
2、產(chǎn)率提高生產(chǎn)率Productivity)減少與業(yè)務(wù)邏輯無關(guān)的代碼減少與業(yè)務(wù)邏輯無關(guān)的代碼 可維護性可維護性Maintainability)對象與關(guān)系數(shù)據(jù)庫之間的緩沖區(qū)對象與關(guān)系數(shù)據(jù)庫之間的緩沖區(qū) 更好性能更好性能Performance) 廠商獨立性廠商獨立性Vendor independence)三個層面的映射一:Java基本類型表的字段類型二:Java類 表三:類之間關(guān)系的映射繼承、關(guān)聯(lián)) 如何實現(xiàn)?Java數(shù)據(jù)庫數(shù)據(jù)庫類的屬性(基本類型)表的列類表1:n/n:1外鍵n:m關(guān)聯(lián)表繼承單表繼承、具體表繼承、類表繼承O/R Mapping 的難點 粒度granularity的問題 子類型subt
3、ypes的問題 同一性identity的問題 與關(guān)聯(lián)associations有關(guān)的問題 對象結(jié)構(gòu)導(dǎo)航的問題實體Bean的不足 使用復(fù)雜,不易掌握; 處理復(fù)雜關(guān)聯(lián)關(guān)系的能力不足,在使用EJB的同時可能仍然需要使用JDBC API; 不易調(diào)試,增加了開發(fā)的成本; 分布式的模型在簡單應(yīng)用上不合適; 依賴于容器;Hibernate 優(yōu)勢 開源 成熟 流行(約13 000 downloads/month) 自定義API JBoss用Hibernate3實現(xiàn)Entity Beans開發(fā)環(huán)境 IDE: Eclipse() Hibernate() Databas
4、e:MySQL+驅(qū)動(mysql) 可選工具:SQLyog(webyog)示例1Hibernate 原理 實體對象Persistent Object) 持久化的對象 Hibernate配置文件 配置數(shù)據(jù)庫連接信息 Hibernate映射文件 配置對象和關(guān)系表的映射信息Hibernate 程序設(shè)計第二講 Hibernate 映射基礎(chǔ)Hibernate基本配置 Hibernate配置文件 POJO對象 映射文件Pojo的理解POJOAn acronym for: Plain Old Java Object.The term was coined while Rebbecca Parsons, Jo
5、sh MacKenzie and I were preparing for a talk at a conference in September 2000. In the talk we were pointing out the many benefits of encoding business logic into regular java objects rather than using Entity Beans. We wondered why people were so against using regular objects in their systems and co
6、ncluded that it was because simple objects lacked a fancy name. So we gave them one, and its caught on very nicely.這個名詞是我這個名詞是我(Martin Fowler)與與Rebbecca Parsons,Josh MacKenzie在在2000年準(zhǔn)備在一年準(zhǔn)備在一個研討會中演講時所創(chuàng)造出來的個研討會中演講時所創(chuàng)造出來的.在這個演講中在這個演講中,我們指出我們指出,將商業(yè)邏輯編碼成標(biāo)準(zhǔn)將商業(yè)邏輯編碼成標(biāo)準(zhǔn)(regular)的的Java對象對象,比使用比使用Entity Beans
7、,可以提供更多的好處可以提供更多的好處.但是我們很驚訝但是我們很驚訝,為什么人們?nèi)绱朔磳υ跒槭裁慈藗內(nèi)绱朔磳υ谒麄兊南到y(tǒng)中使用標(biāo)準(zhǔn)對象他們的系統(tǒng)中使用標(biāo)準(zhǔn)對象,我們的結(jié)論是我們的結(jié)論是:因為簡單的對象缺乏一個流行的名稱因為簡單的對象缺乏一個流行的名稱.因此我們給他一因此我們給他一個好聽的名稱個好聽的名稱,而且這個名稱非常貼切而且這個名稱非常貼切.Either EJB (Enterprise JavaBeans) or POJO (plain old Java objects) can be used to build the business-logic tier. EJB with remo
8、te interfaces is a better choice if the application is distributed. Since JCatalog is a typical Web application with no remote access required, POJO, with the help of the Spring Framework, is used to implement the business-logic tier. 無論無論EJB還是還是POJO都可以用來構(gòu)建業(yè)務(wù)邏輯層都可以用來構(gòu)建業(yè)務(wù)邏輯層.如果應(yīng)用程序是分布式的如果應(yīng)用程序是分布式的,則擁
9、有遠程接口的則擁有遠程接口的EJB是一個很好的選擇是一個很好的選擇.而我們的而我們的JCatalog是一個典型的沒有遠程訪問需求的是一個典型的沒有遠程訪問需求的Web應(yīng)用應(yīng)用,所以在所以在Spring框架下的框架下的POJO被我們用來實現(xiàn)業(yè)務(wù)邏輯層被我們用來實現(xiàn)業(yè)務(wù)邏輯層.Pojo的理解 POJO POJO 是無需遵循特定外部接口或第三方是無需遵循特定外部接口或第三方 API API 的的 Java Java 類類Hibernate 架構(gòu) 實體對象Persistent Object) 持久化的對象 Hibernate配置文件 配置數(shù)據(jù)庫連接信息 Hibernate映射文件 配置對象和關(guān)系表的映
10、射信息Hibernate核心API Configuration 負責(zé)管理數(shù)據(jù)庫的配置信息。數(shù)據(jù)庫的配置信息包含了Hibernate連接數(shù)據(jù)庫的一些基本信息,Configuration對象可以通過加載配置文件獲取并管理這些信息 Configuration conf = new Configuration() conf.configure() File file = new File(“C:myhibernate.xml”); Configuration config = new Configuration().configure(file);Hibernate配置文件配置文件 org.hiber
11、nate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysqllocalhost:3306/hibernate root root true Hibernate配置文件Hibernate核心核心API SessionFactory 負責(zé)創(chuàng)建Session對象,可以通過Configuration對象創(chuàng)建SessionFactory對象 SessionFactory 對象中保存了當(dāng)前的數(shù)據(jù)庫配置信息和所有映射關(guān)系以及預(yù)定義的SQL語句。同時,SessionFactory還負責(zé)維護Hibernate的二級緩存。SessionFactory對象的創(chuàng)
12、建會有較大的開銷,而且SessionFactory對象采取了線程安全的設(shè)計方式,因此在實際中SessionFactory對象可以盡量的共享,在大多數(shù)情況下,一個應(yīng)用中針對一個數(shù)據(jù)庫可以共享一個SessionFactory實例。 如果需要訪問2個以上的數(shù)據(jù)庫,可以寫多個配置文件Hibernate核心核心API SessionFactory創(chuàng)建方式 Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory();Hibernate核心核心API
13、 Session 定義了添加、更新、刪除和查詢等操作,是持久化操作的基礎(chǔ)。Session的設(shè)計是非線程安全的,因而,一個Session對象只可以由一個線程使用。 Session對象可以由SessionFactory對象創(chuàng)建。Configuration config = new Configuration().configure();SessionFactory factory = config.buildSessionFactory();Session session = factory.openSession();Session對象常用方法 save get load delete upda
14、te saveOrUpdate queryHibernate核心核心API Transaction 將應(yīng)用代碼從底層的事務(wù)實現(xiàn)中抽象出來這可能是一個JDBC事務(wù),一個JTA用戶事務(wù)或者甚至是一個公共對象請求代理結(jié)構(gòu)CORBA)允許應(yīng)用通過一組一致的API控制事務(wù)邊界。 使用Hibernate進行操作時增、刪、改必須顯式地調(diào)用Transaction默認:autoCommit=false)Transaction tx = session.beginTransaction();/do something with database (insert, update)txmit();Hibernate映
15、射文件映射文件 映射文件一 Class :定義一個持久化類 name:持久化類或者接口的Java名(如果不加Packege的話,要在mapping節(jié)點加Package屬性)table:對應(yīng)的數(shù)據(jù)庫表名,默認是類名 discriminator-value:子類辨別標(biāo)識 mutable:類是否會發(fā)生改變,用于臟數(shù)據(jù)檢查 where:數(shù)據(jù)篩選條件 id:id:被映射的類必須定義對應(yīng)數(shù)據(jù)庫表主鍵被映射的類必須定義對應(yīng)數(shù)據(jù)庫表主鍵字段字段name (name (可選可選): ): 標(biāo)識屬性的名字標(biāo)識屬性的名字type (type (可選可選): ): 標(biāo)識標(biāo)識HibernateHibernate類型的名
16、類型的名字字, ,建議大家使用對象型的建議大家使用對象型的Integer/LongInteger/Long定定義主鍵義主鍵column (column (可選可選 - - 默認為標(biāo)識屬性名默認為標(biāo)識屬性名): ): 主鍵字段的名字主鍵字段的名字unsaved-value (unsaved-value (可選可選 - - 默認為一個字默認為一個字段判斷段判斷sensiblesensible的值的值): ): 一個特定的標(biāo)一個特定的標(biāo)識屬性值,用來標(biāo)志該實例是剛剛創(chuàng)建的,識屬性值,用來標(biāo)志該實例是剛剛創(chuàng)建的,尚未保存。尚未保存。 這可以把這種實例和從以前的這可以把這種實例和從以前的sessions
17、ession中裝載過可能又做過修改)中裝載過可能又做過修改) 但未但未再次持久化的實例區(qū)分開來再次持久化的實例區(qū)分開來(session.saveOrUpdate(session.saveOrUpdate時需要判斷時需要判斷) )映射文件二Hibernate主鍵生成方式主鍵生成方式Hibernate主鍵生成方式主鍵生成方式映射文件三 property (1) name: 屬性的名字屬性的名字,以小寫字母開頭。以小寫字母開頭。 (2) column (可選可選 - 默認為屬性名字默認為屬性名字): 對應(yīng)的數(shù)據(jù)對應(yīng)的數(shù)據(jù)庫字段名。庫字段名。 也可以通過嵌套的也可以通過嵌套的元素指定。元素指定。 (3
18、) type (可選可選): 一個一個Hibernate類型的名字。類型的名字。 (4) update, insert (可選可選 - 默認為默認為 true) : 表表明用于明用于UPDATE 和和/或或 INSERT 的的SQL語句中是否包含語句中是否包含這個被映射了的字段。這二者如果都設(shè)置為這個被映射了的字段。這二者如果都設(shè)置為false 則表則表明這是一個明這是一個“外源性外源性derived)”的屬性,它的值來的屬性,它的值來源于映射到同一個或多個)源于映射到同一個或多個) 字段的某些其他屬性,或字段的某些其他屬性,或者通過一個者通過一個trigger(觸發(fā)器或其他程序。觸發(fā)器或其他
19、程序。 (5) formula (可選可選): 一個一個SQL表達式,定義了這個表達式,定義了這個計算計算 (computed) 屬性的值。計算屬性沒有和它對應(yīng)屬性的值。計算屬性沒有和它對應(yīng)的數(shù)據(jù)庫字段。的數(shù)據(jù)庫字段。 (6) access (可選可選 - 默認值為默認值為 property): Hibernate用來訪問屬性值的策略。用來訪問屬性值的策略。 (7) lazy (可選可選 - 默認為默認為 false): 指定實例變量第指定實例變量第一次被訪問時,這個屬性是否延遲抓取一次被訪問時,這個屬性是否延遲抓取fetched lazily)()( 需要運行時字節(jié)碼增強)。需要運行時字節(jié)碼
20、增強)。 (8) unique (可選可選): 使用使用DDL為該字段添加唯一的約為該字段添加唯一的約束。束。 此外,這也可以用作此外,這也可以用作property-ref的目標(biāo)屬性。的目標(biāo)屬性。 (9) not-null (可選可選): 使用使用DDL為該字段添加可否為為該字段添加可否為空空nullability的約束。的約束。 (10) optimistic-lock (可選可選 - 默認為默認為 true): 指定這個屬性在做更新時是否需要獲得樂觀鎖定指定這個屬性在做更新時是否需要獲得樂觀鎖定optimistic lock)。)。 換句話說,它決定這個屬性換句話說,它決定這個屬性發(fā)生臟數(shù)
21、據(jù)時版本發(fā)生臟數(shù)據(jù)時版本version的值是否增長的值是否增長Hibernate基本數(shù)據(jù)類型構(gòu)造持久化類必須有無參的構(gòu)造器getter和setter的命名規(guī)則推薦使用id屬性盡量不要用final聲明延遲加載失效)重載equals和hashCode方法重用脫管實例在Set中保存持久化的實例持久化對象的狀態(tài)持久化對象的狀態(tài) Transient ObjectsTransient Objects:使用:使用new new 操作符初始化的對象不是操作符初始化的對象不是立刻就持久的。它們的狀態(tài)是瞬時的,也就是說它們沒有立刻就持久的。它們的狀態(tài)是瞬時的,也就是說它們沒有任何跟數(shù)據(jù)庫表相關(guān)聯(lián)的行為,只要應(yīng)用不
22、再引用這些對任何跟數(shù)據(jù)庫表相關(guān)聯(lián)的行為,只要應(yīng)用不再引用這些對象不再被任何其它對象所引用),它們的狀態(tài)將會丟失,象不再被任何其它對象所引用),它們的狀態(tài)將會丟失,并由垃圾回收機制回收。并由垃圾回收機制回收。 Persist ObjectsPersist Objects:持久實例是任何具有數(shù)據(jù)庫標(biāo)識的實:持久實例是任何具有數(shù)據(jù)庫標(biāo)識的實例。它由持久化管理器例。它由持久化管理器SessionSession統(tǒng)一管理,持久實例是在統(tǒng)一管理,持久實例是在事務(wù)中進行操作的事務(wù)中進行操作的它們的狀態(tài)在事務(wù)結(jié)束時同數(shù)據(jù)庫它們的狀態(tài)在事務(wù)結(jié)束時同數(shù)據(jù)庫進行同步。當(dāng)事務(wù)提交時,通過執(zhí)行進行同步。當(dāng)事務(wù)提交時,通過
23、執(zhí)行SQLSQL的的INSERTINSERT、UPDATEUPDATE和和DELETEDELETE語句把內(nèi)存中的狀態(tài)同步到數(shù)據(jù)庫中。語句把內(nèi)存中的狀態(tài)同步到數(shù)據(jù)庫中。 Detached ObjectsDetached Objects:SessionSession關(guān)閉之后,持久化對象就變關(guān)閉之后,持久化對象就變?yōu)闉閐etacheddetached對象。表示這個對象不能再與數(shù)據(jù)庫保持同步,對象。表示這個對象不能再與數(shù)據(jù)庫保持同步,它們不再受它們不再受HibernateHibernate管理。管理。持久化對象的生命周期持久化對象的生命周期Hibernate 程序設(shè)計第三講 Hibernate 高級映
24、射聯(lián)合主鍵public class Student implements java.io.Serializable private StudentPK pk; public class StudentPK implements java.io.Serializable private String firstName; private String lastName; 聯(lián)合主鍵 組成關(guān)系映射組成關(guān)系映射 特殊數(shù)據(jù)類型的映射 Clob存儲單字節(jié)的字符數(shù)據(jù) ) Blob存儲二進制數(shù)據(jù))自定義類型 Hibernate 程序設(shè)計第四講 Hibernate 關(guān)聯(lián)映射集合類映射 Set集合 name 集合
25、屬性的名稱集合屬性的名稱 table (可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫表(可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫表 lazy (可選可選默認為默認為false)允許延遲加載允許延遲加載lazy initialization ) outer-join 默認默認auto。 true: 表示使用外連接抓取關(guān)聯(lián)的內(nèi)容,這里的意思是表示使用外連接抓取關(guān)聯(lián)的內(nèi)容,這里的意思是當(dāng)使用當(dāng)使用load(Book.class,“id“)時,時,Hibernate只生只生成一條成一條SQL語句將語句將Topic與他的父親與他的父親Book全部初始化。全部初始化。 false:表示不使用外連接抓取關(guān)聯(lián)的內(nèi)容,當(dāng)表示不使用外連接抓取關(guān)聯(lián)的內(nèi)容,當(dāng)lo
26、ad(OrderLineItem.class,“id“)時,時,Hibernate生成兩條生成兩條SQL語句,一條查詢語句,一條查詢Book表,另一表,另一條查詢條查詢Topic表。這樣的好處是可以設(shè)置延遲加載,此處表。這樣的好處是可以設(shè)置延遲加載,此處要將要將Order類設(shè)置為類設(shè)置為lazy=true。 auto:具體是具體是ture還是還是false看看hibernate.cfg.xml中的配置中的配置一對多、多對一一對多、多對一 一對多、多對一 級聯(lián)操作Set集合Set集合 name 集合屬性的名稱集合屬性的名稱 table (可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫表(可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫表 lazy (可
27、選可選默認為默認為false)允許延遲加載允許延遲加載lazy initialization ) inverse (可選可選默認為默認為false) 標(biāo)記由哪一方來維護標(biāo)記由哪一方來維護關(guān)聯(lián)關(guān)系雙向關(guān)聯(lián)中使用)。關(guān)聯(lián)關(guān)系雙向關(guān)聯(lián)中使用)。 cascade (可選可選默認為默認為none) 讓操作級聯(lián)到子實體讓操作級聯(lián)到子實體 order-by (可選可選, 僅用于僅用于jdk1.4) 指定表的字段指定表的字段(一一個或幾個個或幾個)再加上再加上asc或者或者desc(可選可選), 定義定義Map,Set和和Bag的迭代順序的迭代順序 where (可選可選) 指定任意的指定任意的SQL whe
28、re條件條件 outer-join(可選可選-默認為默認為auto)是否使用外聯(lián)接是否使用外聯(lián)接多對多column(必需必需): 中間映射表中,關(guān)聯(lián)目標(biāo)表的關(guān)中間映射表中,關(guān)聯(lián)目標(biāo)表的關(guān)聯(lián)字段聯(lián)字段class (必需必需): 類名,關(guān)聯(lián)目標(biāo)類類名,關(guān)聯(lián)目標(biāo)類outer-join (可選可選 - 默認為默認為auto) column(必需必需):當(dāng)前表的關(guān)聯(lián)字段當(dāng)前表的關(guān)聯(lián)字段繼承關(guān)系映射繼承關(guān)系映射 三種繼承策略 每棵類繼承樹使用一個表(table per class hierarchy) 每個子類一個表(table per subclass) 每個具體類一個表(table per concr
29、ete class )Hibernate 程序設(shè)計第五講 Hibernate 查詢查詢概述查詢概述 概述:數(shù)據(jù)查詢與檢索是概述:數(shù)據(jù)查詢與檢索是Hibernate中的一個亮點。相對中的一個亮點。相對其他其他ORM實現(xiàn)而言,實現(xiàn)而言,Hibernate提供了靈活多樣的查詢機提供了靈活多樣的查詢機制。制。 標(biāo)準(zhǔn)化對象查詢標(biāo)準(zhǔn)化對象查詢(Criteria Query):以對象的方式進行查:以對象的方式進行查詢,將查詢語句封裝為對象操作。優(yōu)點:可讀性好,符合詢,將查詢語句封裝為對象操作。優(yōu)點:可讀性好,符合Java 程序員的編碼習(xí)慣。缺點:不夠成熟,不支持投影程序員的編碼習(xí)慣。缺點:不夠成熟,不支持投
30、影projection或統(tǒng)計函數(shù)或統(tǒng)計函數(shù)aggregation) Hibernate語言查詢語言查詢Hibernate Query Language,HQL):它是完全面向?qū)ο蟮牟樵冋Z句,查詢功能非常強):它是完全面向?qū)ο蟮牟樵冋Z句,查詢功能非常強大,具備繼承、多態(tài)和關(guān)聯(lián)等特性大,具備繼承、多態(tài)和關(guān)聯(lián)等特性 。Hibernate官方推薦官方推薦使用使用HQL進行查詢。進行查詢。 Native SQL Queries原生原生SQL查詢):直接使用數(shù)據(jù)查詢):直接使用數(shù)據(jù)庫提供的庫提供的SQL方言進行查詢。方言進行查詢。HQL 實例實例 from Employee from Vendor as
31、v where v.address=:address and like java% select , dept.description from Department as dept order by desc select new Department(,dept.description) from Department as dept order by asc update Department as dept set =deptname_update where in(:deptlist) delete Department where description is nullHQL 實例實例 select count(vendor),vendor.address from Vendor as vendor group by vendor.address order by count(vendor) 標(biāo)準(zhǔn)化對象查詢標(biāo)準(zhǔn)化對象查詢(Criteria Query) Criteria criteria
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版知識產(chǎn)權(quán)反擔(dān)保保證合同書2篇
- 2025版土地抵押權(quán)抵押資產(chǎn)證券化合同模板3篇
- 設(shè)備監(jiān)理合同-《設(shè)備監(jiān)理合同管理》押題密卷2
- 土壤污染治理與農(nóng)業(yè)生態(tài)環(huán)境保護考核試卷
- 唇部護理產(chǎn)品的選擇與涂抹技巧考核試卷
- 2025年銷售部勞動合同加班時間規(guī)定范本2篇
- 2025年家政服務(wù)服務(wù)調(diào)整協(xié)議
- 2025年度木材行業(yè)綠色認證及產(chǎn)品檢測服務(wù)合同范本4篇
- 2025年婚禮廣告合作協(xié)議
- 二零二五年度房地產(chǎn)項目納稅擔(dān)保及貸款擔(dān)保合同2篇
- 2024年安全教育培訓(xùn)試題附完整答案(奪冠系列)
- 神農(nóng)架研學(xué)課程設(shè)計
- 文化資本與民族認同建構(gòu)-洞察分析
- 2025新譯林版英語七年級下單詞默寫表
- 《錫膏培訓(xùn)教材》課件
- 唯物史觀課件
- 2021-2022學(xué)年四川省成都市武侯區(qū)部編版四年級上冊期末考試語文試卷(解析版)
- 中國傳統(tǒng)文化服飾文化
- 大氣污染控制工程 第四版
- 淺析商務(wù)英語中模糊語言的語用功能
- 工程勘察資質(zhì)分級標(biāo)準(zhǔn)和工程設(shè)計資質(zhì)分級標(biāo)準(zhǔn)
評論
0/150
提交評論