




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Hibernate程序設(shè)計(jì)第一講Hibernate概述第二講對(duì)象關(guān)系映射基礎(chǔ)第三講復(fù)雜實(shí)體映射第四講關(guān)聯(lián)映射第五講Hibernate查詢Hibernate 程序設(shè)計(jì)第一講 Hibernate 概述DAO模式的不足 SQL語(yǔ)句出現(xiàn)在程序中,不利于維護(hù)、移植; 與java倡導(dǎo)的面向?qū)ο蟮脑瓌t相違背; 重復(fù)同類編碼; 開(kāi)發(fā)人員需要處理底層代碼如建立、斷開(kāi)數(shù)據(jù)庫(kù)連接等;O/R Mapping 對(duì)象-關(guān)系映射就是Java應(yīng)用中的對(duì)象到關(guān)系數(shù)據(jù)庫(kù)中的表的自動(dòng)的和透明的持久化,使用元數(shù)據(jù)meta data描述對(duì)象與數(shù)據(jù)庫(kù)間的映射。本質(zhì)上,ORM的工作是將數(shù)據(jù)從一種表示轉(zhuǎn)換為另一種。對(duì)象關(guān)系映射的優(yōu)點(diǎn) 提高生
2、產(chǎn)率提高生產(chǎn)率Productivity)減少與業(yè)務(wù)邏輯無(wú)關(guān)的代碼減少與業(yè)務(wù)邏輯無(wú)關(guān)的代碼 可維護(hù)性可維護(hù)性Maintainability)對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間的緩沖區(qū)對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間的緩沖區(qū) 更好性能更好性能Performance) 廠商獨(dú)立性廠商獨(dú)立性Vendor independence)三個(gè)層面的映射一:Java基本類型表的字段類型二:Java類 表三:類之間關(guān)系的映射繼承、關(guān)聯(lián)) 如何實(shí)現(xiàn)?Java數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)類的屬性(基本類型)表的列類表1:n/n:1外鍵n:m關(guān)聯(lián)表繼承單表繼承、具體表繼承、類表繼承O/R Mapping 的難點(diǎn) 粒度granularity的問(wèn)題 子類型subt
3、ypes的問(wèn)題 同一性identity的問(wèn)題 與關(guān)聯(lián)associations有關(guān)的問(wèn)題 對(duì)象結(jié)構(gòu)導(dǎo)航的問(wèn)題實(shí)體Bean的不足 使用復(fù)雜,不易掌握; 處理復(fù)雜關(guān)聯(lián)關(guān)系的能力不足,在使用EJB的同時(shí)可能仍然需要使用JDBC API; 不易調(diào)試,增加了開(kāi)發(fā)的成本; 分布式的模型在簡(jiǎn)單應(yīng)用上不合適; 依賴于容器;Hibernate 優(yōu)勢(shì) 開(kāi)源 成熟 流行(約13 000 downloads/month) 自定義API JBoss用Hibernate3實(shí)現(xiàn)Entity Beans開(kāi)發(fā)環(huán)境 IDE: Eclipse() Hibernate() Databas
4、e:MySQL+驅(qū)動(dòng)(mysql) 可選工具:SQLyog(webyog)示例1Hibernate 原理 實(shí)體對(duì)象Persistent Object) 持久化的對(duì)象 Hibernate配置文件 配置數(shù)據(jù)庫(kù)連接信息 Hibernate映射文件 配置對(duì)象和關(guān)系表的映射信息Hibernate 程序設(shè)計(jì)第二講 Hibernate 映射基礎(chǔ)Hibernate基本配置 Hibernate配置文件 POJO對(duì)象 映射文件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.這個(gè)名詞是我這個(gè)名詞是我(Martin Fowler)與與Rebbecca Parsons,Josh MacKenzie在在2000年準(zhǔn)備在一年準(zhǔn)備在一個(gè)研討會(huì)中演講時(shí)所創(chuàng)造出來(lái)的個(gè)研討會(huì)中演講時(shí)所創(chuàng)造出來(lái)的.在這個(gè)演講中在這個(gè)演講中,我們指出我們指出,將商業(yè)邏輯編碼成標(biāo)準(zhǔn)將商業(yè)邏輯編碼成標(biāo)準(zhǔn)(regular)的的Java對(duì)象對(duì)象,比使用比使用Entity Beans
7、,可以提供更多的好處可以提供更多的好處.但是我們很驚訝但是我們很驚訝,為什么人們?nèi)绱朔磳?duì)在為什么人們?nèi)绱朔磳?duì)在他們的系統(tǒng)中使用標(biāo)準(zhǔn)對(duì)象他們的系統(tǒng)中使用標(biāo)準(zhǔn)對(duì)象,我們的結(jié)論是我們的結(jié)論是:因?yàn)楹?jiǎn)單的對(duì)象缺乏一個(gè)流行的名稱因?yàn)楹?jiǎn)單的對(duì)象缺乏一個(gè)流行的名稱.因此我們給他一因此我們給他一個(gè)好聽(tīng)的名稱個(gè)好聽(tīng)的名稱,而且這個(gè)名稱非常貼切而且這個(gè)名稱非常貼切.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. 無(wú)論無(wú)論EJB還是還是POJO都可以用來(lái)構(gòu)建業(yè)務(wù)邏輯層都可以用來(lái)構(gòu)建業(yè)務(wù)邏輯層.如果應(yīng)用程序是分布式的如果應(yīng)用程序是分布式的,則擁
9、有遠(yuǎn)程接口的則擁有遠(yuǎn)程接口的EJB是一個(gè)很好的選擇是一個(gè)很好的選擇.而我們的而我們的JCatalog是一個(gè)典型的沒(méi)有遠(yuǎn)程訪問(wèn)需求的是一個(gè)典型的沒(méi)有遠(yuǎn)程訪問(wèn)需求的Web應(yīng)用應(yīng)用,所以在所以在Spring框架下的框架下的POJO被我們用來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯層被我們用來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯層.Pojo的理解 POJO POJO 是無(wú)需遵循特定外部接口或第三方是無(wú)需遵循特定外部接口或第三方 API API 的的 Java Java 類類Hibernate 架構(gòu) 實(shí)體對(duì)象Persistent Object) 持久化的對(duì)象 Hibernate配置文件 配置數(shù)據(jù)庫(kù)連接信息 Hibernate映射文件 配置對(duì)象和關(guān)系表的映
10、射信息Hibernate核心API Configuration 負(fù)責(zé)管理數(shù)據(jù)庫(kù)的配置信息。數(shù)據(jù)庫(kù)的配置信息包含了Hibernate連接數(shù)據(jù)庫(kù)的一些基本信息,Configuration對(duì)象可以通過(guò)加載配置文件獲取并管理這些信息 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 負(fù)責(zé)創(chuàng)建Session對(duì)象,可以通過(guò)Configuration對(duì)象創(chuàng)建SessionFactory對(duì)象 SessionFactory 對(duì)象中保存了當(dāng)前的數(shù)據(jù)庫(kù)配置信息和所有映射關(guān)系以及預(yù)定義的SQL語(yǔ)句。同時(shí),SessionFactory還負(fù)責(zé)維護(hù)Hibernate的二級(jí)緩存。SessionFactory對(duì)象的創(chuàng)
12、建會(huì)有較大的開(kāi)銷,而且SessionFactory對(duì)象采取了線程安全的設(shè)計(jì)方式,因此在實(shí)際中SessionFactory對(duì)象可以盡量的共享,在大多數(shù)情況下,一個(gè)應(yīng)用中針對(duì)一個(gè)數(shù)據(jù)庫(kù)可以共享一個(gè)SessionFactory實(shí)例。 如果需要訪問(wèn)2個(gè)以上的數(shù)據(jù)庫(kù),可以寫多個(gè)配置文件Hibernate核心核心API SessionFactory創(chuàng)建方式 Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory();Hibernate核心核心API
13、 Session 定義了添加、更新、刪除和查詢等操作,是持久化操作的基礎(chǔ)。Session的設(shè)計(jì)是非線程安全的,因而,一個(gè)Session對(duì)象只可以由一個(gè)線程使用。 Session對(duì)象可以由SessionFactory對(duì)象創(chuàng)建。Configuration config = new Configuration().configure();SessionFactory factory = config.buildSessionFactory();Session session = factory.openSession();Session對(duì)象常用方法 save get load delete upda
14、te saveOrUpdate queryHibernate核心核心API Transaction 將應(yīng)用代碼從底層的事務(wù)實(shí)現(xiàn)中抽象出來(lái)這可能是一個(gè)JDBC事務(wù),一個(gè)JTA用戶事務(wù)或者甚至是一個(gè)公共對(duì)象請(qǐng)求代理結(jié)構(gòu)CORBA)允許應(yīng)用通過(guò)一組一致的API控制事務(wù)邊界。 使用Hibernate進(jìn)行操作時(shí)增、刪、改必須顯式地調(diào)用Transaction默認(rèn):autoCommit=false)Transaction tx = session.beginTransaction();/do something with database (insert, update)txmit();Hibernate映
15、射文件映射文件 映射文件一 Class :定義一個(gè)持久化類 name:持久化類或者接口的Java名(如果不加Packege的話,要在mapping節(jié)點(diǎn)加Package屬性)table:對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名,默認(rèn)是類名 discriminator-value:子類辨別標(biāo)識(shí) mutable:類是否會(huì)發(fā)生改變,用于臟數(shù)據(jù)檢查 where:數(shù)據(jù)篩選條件 id:id:被映射的類必須定義對(duì)應(yīng)數(shù)據(jù)庫(kù)表主鍵被映射的類必須定義對(duì)應(yīng)數(shù)據(jù)庫(kù)表主鍵字段字段name (name (可選可選): ): 標(biāo)識(shí)屬性的名字標(biāo)識(shí)屬性的名字type (type (可選可選): ): 標(biāo)識(shí)標(biāo)識(shí)HibernateHibernate類型的名
16、類型的名字字, ,建議大家使用對(duì)象型的建議大家使用對(duì)象型的Integer/LongInteger/Long定定義主鍵義主鍵column (column (可選可選 - - 默認(rèn)為標(biāo)識(shí)屬性名默認(rèn)為標(biāo)識(shí)屬性名): ): 主鍵字段的名字主鍵字段的名字unsaved-value (unsaved-value (可選可選 - - 默認(rèn)為一個(gè)字默認(rèn)為一個(gè)字段判斷段判斷sensiblesensible的值的值): ): 一個(gè)特定的標(biāo)一個(gè)特定的標(biāo)識(shí)屬性值,用來(lái)標(biāo)志該實(shí)例是剛剛創(chuàng)建的,識(shí)屬性值,用來(lái)標(biāo)志該實(shí)例是剛剛創(chuàng)建的,尚未保存。尚未保存。 這可以把這種實(shí)例和從以前的這可以把這種實(shí)例和從以前的sessions
17、ession中裝載過(guò)可能又做過(guò)修改)中裝載過(guò)可能又做過(guò)修改) 但未但未再次持久化的實(shí)例區(qū)分開(kāi)來(lái)再次持久化的實(shí)例區(qū)分開(kāi)來(lái)(session.saveOrUpdate(session.saveOrUpdate時(shí)需要判斷時(shí)需要判斷) )映射文件二Hibernate主鍵生成方式主鍵生成方式Hibernate主鍵生成方式主鍵生成方式映射文件三 property (1) name: 屬性的名字屬性的名字,以小寫字母開(kāi)頭。以小寫字母開(kāi)頭。 (2) column (可選可選 - 默認(rèn)為屬性名字默認(rèn)為屬性名字): 對(duì)應(yīng)的數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)字段名。庫(kù)字段名。 也可以通過(guò)嵌套的也可以通過(guò)嵌套的元素指定。元素指定。 (3
18、) type (可選可選): 一個(gè)一個(gè)Hibernate類型的名字。類型的名字。 (4) update, insert (可選可選 - 默認(rèn)為默認(rèn)為 true) : 表表明用于明用于UPDATE 和和/或或 INSERT 的的SQL語(yǔ)句中是否包含語(yǔ)句中是否包含這個(gè)被映射了的字段。這二者如果都設(shè)置為這個(gè)被映射了的字段。這二者如果都設(shè)置為false 則表則表明這是一個(gè)明這是一個(gè)“外源性外源性derived)”的屬性,它的值來(lái)的屬性,它的值來(lái)源于映射到同一個(gè)或多個(gè))源于映射到同一個(gè)或多個(gè)) 字段的某些其他屬性,或字段的某些其他屬性,或者通過(guò)一個(gè)者通過(guò)一個(gè)trigger(觸發(fā)器或其他程序。觸發(fā)器或其他
19、程序。 (5) formula (可選可選): 一個(gè)一個(gè)SQL表達(dá)式,定義了這個(gè)表達(dá)式,定義了這個(gè)計(jì)算計(jì)算 (computed) 屬性的值。計(jì)算屬性沒(méi)有和它對(duì)應(yīng)屬性的值。計(jì)算屬性沒(méi)有和它對(duì)應(yīng)的數(shù)據(jù)庫(kù)字段。的數(shù)據(jù)庫(kù)字段。 (6) access (可選可選 - 默認(rèn)值為默認(rèn)值為 property): Hibernate用來(lái)訪問(wèn)屬性值的策略。用來(lái)訪問(wèn)屬性值的策略。 (7) lazy (可選可選 - 默認(rèn)為默認(rèn)為 false): 指定實(shí)例變量第指定實(shí)例變量第一次被訪問(wèn)時(shí),這個(gè)屬性是否延遲抓取一次被訪問(wèn)時(shí),這個(gè)屬性是否延遲抓取fetched lazily)()( 需要運(yùn)行時(shí)字節(jié)碼增強(qiáng))。需要運(yùn)行時(shí)字節(jié)碼
20、增強(qiáng))。 (8) unique (可選可選): 使用使用DDL為該字段添加唯一的約為該字段添加唯一的約束。束。 此外,這也可以用作此外,這也可以用作property-ref的目標(biāo)屬性。的目標(biāo)屬性。 (9) not-null (可選可選): 使用使用DDL為該字段添加可否為為該字段添加可否為空空nullability的約束。的約束。 (10) optimistic-lock (可選可選 - 默認(rèn)為默認(rèn)為 true): 指定這個(gè)屬性在做更新時(shí)是否需要獲得樂(lè)觀鎖定指定這個(gè)屬性在做更新時(shí)是否需要獲得樂(lè)觀鎖定optimistic lock)。)。 換句話說(shuō),它決定這個(gè)屬性換句話說(shuō),它決定這個(gè)屬性發(fā)生臟數(shù)
21、據(jù)時(shí)版本發(fā)生臟數(shù)據(jù)時(shí)版本version的值是否增長(zhǎng)的值是否增長(zhǎng)Hibernate基本數(shù)據(jù)類型構(gòu)造持久化類必須有無(wú)參的構(gòu)造器getter和setter的命名規(guī)則推薦使用id屬性盡量不要用final聲明延遲加載失效)重載equals和hashCode方法重用脫管實(shí)例在Set中保存持久化的實(shí)例持久化對(duì)象的狀態(tài)持久化對(duì)象的狀態(tài) Transient ObjectsTransient Objects:使用:使用new new 操作符初始化的對(duì)象不是操作符初始化的對(duì)象不是立刻就持久的。它們的狀態(tài)是瞬時(shí)的,也就是說(shuō)它們沒(méi)有立刻就持久的。它們的狀態(tài)是瞬時(shí)的,也就是說(shuō)它們沒(méi)有任何跟數(shù)據(jù)庫(kù)表相關(guān)聯(lián)的行為,只要應(yīng)用不
22、再引用這些對(duì)任何跟數(shù)據(jù)庫(kù)表相關(guān)聯(lián)的行為,只要應(yīng)用不再引用這些對(duì)象不再被任何其它對(duì)象所引用),它們的狀態(tài)將會(huì)丟失,象不再被任何其它對(duì)象所引用),它們的狀態(tài)將會(huì)丟失,并由垃圾回收機(jī)制回收。并由垃圾回收機(jī)制回收。 Persist ObjectsPersist Objects:持久實(shí)例是任何具有數(shù)據(jù)庫(kù)標(biāo)識(shí)的實(shí):持久實(shí)例是任何具有數(shù)據(jù)庫(kù)標(biāo)識(shí)的實(shí)例。它由持久化管理器例。它由持久化管理器SessionSession統(tǒng)一管理,持久實(shí)例是在統(tǒng)一管理,持久實(shí)例是在事務(wù)中進(jìn)行操作的事務(wù)中進(jìn)行操作的它們的狀態(tài)在事務(wù)結(jié)束時(shí)同數(shù)據(jù)庫(kù)它們的狀態(tài)在事務(wù)結(jié)束時(shí)同數(shù)據(jù)庫(kù)進(jìn)行同步。當(dāng)事務(wù)提交時(shí),通過(guò)執(zhí)行進(jìn)行同步。當(dāng)事務(wù)提交時(shí),通過(guò)
23、執(zhí)行SQLSQL的的INSERTINSERT、UPDATEUPDATE和和DELETEDELETE語(yǔ)句把內(nèi)存中的狀態(tài)同步到數(shù)據(jù)庫(kù)中。語(yǔ)句把內(nèi)存中的狀態(tài)同步到數(shù)據(jù)庫(kù)中。 Detached ObjectsDetached Objects:SessionSession關(guān)閉之后,持久化對(duì)象就變關(guān)閉之后,持久化對(duì)象就變?yōu)闉閐etacheddetached對(duì)象。表示這個(gè)對(duì)象不能再與數(shù)據(jù)庫(kù)保持同步,對(duì)象。表示這個(gè)對(duì)象不能再與數(shù)據(jù)庫(kù)保持同步,它們不再受它們不再受HibernateHibernate管理。管理。持久化對(duì)象的生命周期持久化對(duì)象的生命周期Hibernate 程序設(shè)計(jì)第三講 Hibernate 高級(jí)映
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存儲(chǔ)單字節(jié)的字符數(shù)據(jù) ) Blob存儲(chǔ)二進(jìn)制數(shù)據(jù))自定義類型 Hibernate 程序設(shè)計(jì)第四講 Hibernate 關(guān)聯(lián)映射集合類映射 Set集合 name 集合
25、屬性的名稱集合屬性的名稱 table (可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫(kù)表(可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫(kù)表 lazy (可選可選默認(rèn)為默認(rèn)為false)允許延遲加載允許延遲加載lazy initialization ) outer-join 默認(rèn)默認(rèn)auto。 true: 表示使用外連接抓取關(guān)聯(lián)的內(nèi)容,這里的意思是表示使用外連接抓取關(guān)聯(lián)的內(nèi)容,這里的意思是當(dāng)使用當(dāng)使用load(Book.class,“id“)時(shí),時(shí),Hibernate只生只生成一條成一條SQL語(yǔ)句將語(yǔ)句將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“)時(shí),時(shí),Hibernate生成兩條生成兩條SQL語(yǔ)句,一條查詢語(yǔ)句,一條查詢Book表,另一表,另一條查詢條查詢Topic表。這樣的好處是可以設(shè)置延遲加載,此處表。這樣的好處是可以設(shè)置延遲加載,此處要將要將Order類設(shè)置為類設(shè)置為lazy=true。 auto:具體是具體是ture還是還是false看看hibernate.cfg.xml中的配置中的配置一對(duì)多、多對(duì)一一對(duì)多、多對(duì)一 一對(duì)多、多對(duì)一 級(jí)聯(lián)操作Set集合Set集合 name 集合屬性的名稱集合屬性的名稱 table (可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫(kù)表(可選目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫(kù)表 lazy (可
27、選可選默認(rèn)為默認(rèn)為false)允許延遲加載允許延遲加載lazy initialization ) inverse (可選可選默認(rèn)為默認(rèn)為false) 標(biāo)記由哪一方來(lái)維護(hù)標(biāo)記由哪一方來(lái)維護(hù)關(guān)聯(lián)關(guān)系雙向關(guān)聯(lián)中使用)。關(guān)聯(lián)關(guān)系雙向關(guān)聯(lián)中使用)。 cascade (可選可選默認(rèn)為默認(rèn)為none) 讓操作級(jí)聯(lián)到子實(shí)體讓操作級(jí)聯(lián)到子實(shí)體 order-by (可選可選, 僅用于僅用于jdk1.4) 指定表的字段指定表的字段(一一個(gè)或幾個(gè)個(gè)或幾個(gè))再加上再加上asc或者或者desc(可選可選), 定義定義Map,Set和和Bag的迭代順序的迭代順序 where (可選可選) 指定任意的指定任意的SQL whe
28、re條件條件 outer-join(可選可選-默認(rèn)為默認(rèn)為auto)是否使用外聯(lián)接是否使用外聯(lián)接多對(duì)多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 (可選可選 - 默認(rèn)為默認(rèn)為auto) column(必需必需):當(dāng)前表的關(guān)聯(lián)字段當(dāng)前表的關(guān)聯(lián)字段繼承關(guān)系映射繼承關(guān)系映射 三種繼承策略 每棵類繼承樹(shù)使用一個(gè)表(table per class hierarchy) 每個(gè)子類一個(gè)表(table per subclass) 每個(gè)具體類一個(gè)表(table per concr
29、ete class )Hibernate 程序設(shè)計(jì)第五講 Hibernate 查詢查詢概述查詢概述 概述:數(shù)據(jù)查詢與檢索是概述:數(shù)據(jù)查詢與檢索是Hibernate中的一個(gè)亮點(diǎn)。相對(duì)中的一個(gè)亮點(diǎn)。相對(duì)其他其他ORM實(shí)現(xiàn)而言,實(shí)現(xiàn)而言,Hibernate提供了靈活多樣的查詢機(jī)提供了靈活多樣的查詢機(jī)制。制。 標(biāo)準(zhǔn)化對(duì)象查詢標(biāo)準(zhǔn)化對(duì)象查詢(Criteria Query):以對(duì)象的方式進(jìn)行查:以對(duì)象的方式進(jìn)行查詢,將查詢語(yǔ)句封裝為對(duì)象操作。優(yōu)點(diǎn):可讀性好,符合詢,將查詢語(yǔ)句封裝為對(duì)象操作。優(yōu)點(diǎn):可讀性好,符合Java 程序員的編碼習(xí)慣。缺點(diǎn):不夠成熟,不支持投影程序員的編碼習(xí)慣。缺點(diǎn):不夠成熟,不支持投
30、影projection或統(tǒng)計(jì)函數(shù)或統(tǒng)計(jì)函數(shù)aggregation) Hibernate語(yǔ)言查詢語(yǔ)言查詢Hibernate Query Language,HQL):它是完全面向?qū)ο蟮牟樵冋Z(yǔ)句,查詢功能非常強(qiáng)):它是完全面向?qū)ο蟮牟樵冋Z(yǔ)句,查詢功能非常強(qiáng)大,具備繼承、多態(tài)和關(guān)聯(lián)等特性大,具備繼承、多態(tài)和關(guān)聯(lián)等特性 。Hibernate官方推薦官方推薦使用使用HQL進(jìn)行查詢。進(jìn)行查詢。 Native SQL Queries原生原生SQL查詢):直接使用數(shù)據(jù)查詢):直接使用數(shù)據(jù)庫(kù)提供的庫(kù)提供的SQL方言進(jìn)行查詢。方言進(jìn)行查詢。HQL 實(shí)例實(shí)例 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 實(shí)例實(shí)例 select count(vendor),vendor.address from Vendor as vendor group by vendor.address order by count(vendor) 標(biāo)準(zhǔn)化對(duì)象查詢標(biāo)準(zhǔn)化對(duì)象查詢(Criteria Query) Criteria criteria
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題開(kāi)題報(bào)告:基于OBE理念的應(yīng)用型本科高校數(shù)智化財(cái)務(wù)人才培養(yǎng)模式研究
- 課題開(kāi)題報(bào)告:基礎(chǔ)教育階段拔尖創(chuàng)新人才培養(yǎng)研究
- 課題開(kāi)題報(bào)告:湖北省中職院校專業(yè)設(shè)置與區(qū)域產(chǎn)業(yè)結(jié)構(gòu)耦合度研究
- 課題開(kāi)題報(bào)告:湖北省高等教育數(shù)字化水平測(cè)度與提升策略研究
- 課題開(kāi)題報(bào)告:湖北高校學(xué)科專業(yè)結(jié)構(gòu)調(diào)整與優(yōu)化研究
- 課題開(kāi)題報(bào)告:和諧校園建設(shè)研究
- 課題開(kāi)題報(bào)告:國(guó)際社會(huì)終身教育實(shí)踐創(chuàng)新研究
- 課題開(kāi)題報(bào)告:構(gòu)建湖北特色教育發(fā)展新格局的內(nèi)涵及策略研究
- 魚批發(fā)企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略研究報(bào)告
- 硫尿樹(shù)脂企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 酒店安全管理制度及應(yīng)急預(yù)案
- 人工智能賦能教師數(shù)字素養(yǎng)提升
- 房地產(chǎn)估價(jià)培訓(xùn)
- 2024年度智慧城市建設(shè)綜合解決方案投標(biāo)書實(shí)例3篇
- 《勞動(dòng)工具的改進(jìn)設(shè)計(jì)》六年級(jí)綜合實(shí)踐課件
- TDT1055-2019第三次全國(guó)國(guó)土調(diào)查技術(shù)規(guī)程
- 2021年河南公務(wù)員行測(cè)考試真題及答案
- 廣告安裝施工及方案
- 應(yīng)急第一響應(yīng)人理論考試試卷(含答案)
- 單晶爐車間安全培訓(xùn)
- 英語(yǔ)演講技巧與實(shí)訓(xùn)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評(píng)論
0/150
提交評(píng)論