出版時間:2010-2 出版社:孫衛(wèi)琴 電子工業(yè)出版社 (2010-02出版) 作者:孫衛(wèi)琴 頁數(shù):716
Tag標簽:無
前言
在如今的企業(yè)級應用開發(fā)環(huán)境中,面向?qū)ο蟮拈_發(fā)方法已成為主流。眾所周知,對象只能存在于內(nèi)存中,而內(nèi)存不能永久保存數(shù)據(jù)。如果要永久保存對象的狀態(tài),需要進行對象的持久化,即把對象存儲到專門的數(shù)據(jù)存儲庫中。目前,關(guān)系數(shù)據(jù)庫仍然是使用最廣泛的數(shù)據(jù)存儲庫。關(guān)系數(shù)據(jù)庫中存放的是關(guān)系數(shù)據(jù),它是非面向?qū)ο蟮?。對象和關(guān)系數(shù)據(jù)其實是業(yè)務實體的兩種表現(xiàn)形式。業(yè)務實體在內(nèi)存中表現(xiàn)為對象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達多對多關(guān)聯(lián)和繼承關(guān)系。因此,把對象持久化到關(guān)系數(shù)據(jù)庫中,需要進行對象-關(guān)系的映射(Object/Relation Mapping,簡稱ORM),這是一項煩瑣耗時的工作。在實際應用中,除了需要把內(nèi)存中的對象持久化到數(shù)據(jù)庫外,還需要把數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)再重新加載到內(nèi)存中,以滿足用戶查詢業(yè)務數(shù)據(jù)的需求。頻繁地訪問數(shù)據(jù)庫,會對應用的性能造成很大影響。為了降低訪問數(shù)據(jù)庫的頻率,可以把需要經(jīng)常被訪問的業(yè)務數(shù)據(jù)存放在緩存中,并且通過特定的機制來保證緩存中的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)同步。在Java領域,可以直接通過JDBC編程來訪問數(shù)據(jù)庫。JDBC可以說是訪問關(guān)系數(shù)據(jù)庫的最原始、最直接的方法。這種方式的優(yōu)點是運行效率高,缺點是在Java程序代碼中嵌入大量SQL語句,使得項目難以維護。在開發(fā)企業(yè)級應用時,可以通過JDBC編程來開發(fā)單獨的持久化層,把數(shù)據(jù)庫訪問操作封裝起來,提供簡潔的API,供業(yè)務層統(tǒng)一調(diào)用。但是,如果關(guān)系數(shù)據(jù)模型非常復雜,那么直接通過JDBC編程來實現(xiàn)持久化層就需要有專業(yè)的知識。對于企業(yè)應用的開發(fā)人員,花費大量時間從頭開發(fā)自己的持久化層不是很可行的。幸運的是,目前在持久化層已經(jīng)有好多種現(xiàn)成的持久化中間件可供選用,有些是商業(yè)性的,如TopLink;有些是非商業(yè)性的,如JDO和Hibernate。Hibernate是一個基于Java的開放源代碼的持久化中間件,它對JDBC做了輕量級封裝,不僅提供ORM映射服務,還提供數(shù)據(jù)查詢和數(shù)據(jù)緩存功能,Java開發(fā)人員可以方便地通過Hibernate API來操縱數(shù)據(jù)庫?,F(xiàn)在,越來越多的Java開發(fā)人員把Hibernate作為企業(yè)應用和關(guān)系數(shù)據(jù)庫之間的中間件,以節(jié)省和對象持久化有關(guān)的30%的JDBC編程工作量。2005年,Hibernate作為優(yōu)秀的類庫和組件,榮獲了第15屆Jolt大獎。Hibernate之所以能夠流行,歸功于它的以下優(yōu)勢。(1)它是開放源代碼的,允許開發(fā)人員在需要的時候研究源代碼,改寫源代碼,定制客戶化功能。(2)具有詳細的參考文檔。(3)對JDBC僅做了輕量級封裝,若有必要的話,用戶還可以繞過Hibernate,直接訪問JDBC API。(4)具有可擴展性。(5)使用方便,容易上手。(6)Hibernate既適用于獨立的Java程序,也適用于Java Web應用,而且還可在J2EE架構(gòu)中取代CMP(Container-managered Persistence,由容器管理持久化),完成對象持久化的重任,Hibernate能集成到會話EJB和基于BMP的實體EJB中,BMP(Bean- managered Persistence)是指由實體EJB本身管理持久化。(7)Hibernate可以和多種Web服務器、應用服務器良好集成,并且支持幾乎所有流行的數(shù)據(jù)庫服務器。本書結(jié)合大量典型的實例,詳細介紹運用目前最成熟的Hibernate 3.3版本進行Java對象持久化的技術(shù)。Hibernate是連接Java對象模型和關(guān)系數(shù)據(jù)模型的橋梁,通過本書,讀者不僅能掌握用Hibernate工具對這兩種模型進行映射的技術(shù),還能獲得設計與開發(fā)Java對象模型和關(guān)系數(shù)據(jù)模型的先進經(jīng)驗。 本書的組織結(jié)構(gòu)和主要內(nèi)容本書按照由淺入深、前后照應的順序來安排內(nèi)容,主要包含以下內(nèi)容。1.Hibernate入門(第1章、第2章和第3章)第1章、第2章和第3章為入門篇。第1章和第2章概要介紹和Java對象持久化相關(guān)的各種技術(shù),詳細闡述中間件、Java對象的持久化、持久化層、數(shù)據(jù)訪問細節(jié)、ORM、域模型和關(guān)系數(shù)據(jù)模型等概念。第3章以一個Hibernate應用實例—helloapp應用為例,引導讀者把握設計、開發(fā)和部署Hibernate應用的整體流程,理解Hibernate在分層的軟件結(jié)構(gòu)中所處的位置。對于已經(jīng)在Java對象持久化領域有一定工作經(jīng)驗的開發(fā)人員,可以從第1章和第2章入手,高屋建瓴地把握持久化領域的各種理論,對于新手,不妨先閱讀第3章,以便快速獲得開發(fā)Hibernate應用的實際經(jīng)驗。2.Hibernate工具(第4章和附錄C)第4章和附錄C介紹Hibernate的一些代碼轉(zhuǎn)換工具的用法,例如,hbm2java工具能根據(jù)映射文件自動生成Java源文件,hbm2ddl功能能根據(jù)映射文件自動生成數(shù)據(jù)庫Schema。3.對象-關(guān)系映射技術(shù)(第5、6、7、10、11、12、13、14和15章)本書重點介紹的內(nèi)容之一就是如何運用Hibernate工具,把對象模型映射到關(guān)系數(shù)據(jù)模型,相關(guān)章節(jié)包括:第5章:介紹對象-關(guān)系映射的基礎知識。第6章:介紹對象標識符的映射方法。第7章:介紹一對多關(guān)聯(lián)關(guān)系的映射方法。第10章:介紹組成關(guān)系的映射方法。第11章:介紹Java類型、SQL類型和Hibernate映射類型之間的對應關(guān)系。第12章:介紹繼承關(guān)系的映射方法。第13章:介紹Java集合類的用法,這一章主要是為第14章做鋪墊的。第14章:介紹Java集合的映射方法。第15章:介紹一對一和多對多關(guān)聯(lián)關(guān)系的映射方法。4.通過Hibernate API操縱數(shù)據(jù)庫(第8、9和23章)第8章介紹運用Hibernate API來保存、更新、刪除、加載或查詢Java對象的方法,并介紹Java對象在持久化層的4種狀態(tài):臨時狀態(tài)、持久化狀態(tài)、游離狀態(tài)和刪除狀態(tài)。深入理解Java對象的4種狀態(tài)及狀態(tài)轉(zhuǎn)化機制,是編寫健壯的Hibernate應用程序的必要條件。第9章介紹Hibernate與觸發(fā)器協(xié)同工作的技巧、攔截器(Interceptor)的用法,以及擴展Hibernate的事件監(jiān)聽器的方法。此外,還介紹Hibernate提供的批量處理數(shù)據(jù)的各種方法。第23章介紹Session的生命周期的管理方式,以及會話的實現(xiàn)方式。這一章的內(nèi)容將幫助讀者簡化Hibernate應用的程序代碼,并且為應用設計合理的軟件架構(gòu)。5.Hibernate的檢索策略和檢索方式(第16、17和18章)第16章介紹Hibernate的各種檢索策略,對每一種檢索策略,都介紹它的適用場合。第17章和第18章介紹HQL查詢語句的語法,以及QBC API的使用方法。合理運用Hibernate的檢索策略及檢索技巧,是提高Hibernate應用性能的重要手段。6.數(shù)據(jù)庫事務、并發(fā)、緩存與性能優(yōu)化(第20、21和22章)第20章先介紹數(shù)據(jù)庫事務的概念,接著介紹運用Hibernate API和JTA API來聲明事務邊界的方法。第21章介紹在并發(fā)環(huán)境中出現(xiàn)的各種并發(fā)問題,然后介紹采用Hibernate的悲觀鎖,以及版本控制功能來避免并發(fā)問題的方法。第22章介紹Hibernate的二級緩存機制,并介紹如何根據(jù)實際需要來配置Hibernate的第二級緩存,以提高應用的性能。7.Hibernate高級配置(第19章)第19章主要介紹Hibernate應用的兩種運行環(huán)境:受管理環(huán)境與不受管理環(huán)境,然后介紹在這兩種環(huán)境中配置數(shù)據(jù)庫連接池、SessionFactory實例及事務的方法。8.綜合實例(第24、25章)第24章和第25章介紹一個名為netstore應用的電子商務網(wǎng)站的實例,netstore應用是利用Struts作為Java Web框架,用Hibernate來完成對象持久化的任務,并且分別用普通的JavaBean及EJB組件來實現(xiàn)業(yè)務邏輯。9.附錄本書的附錄介紹標準SQL語言的主要用法、Java的反射機制、XDoclet工具的用法,以及把Hibernate 2應用升級到Hibernate 3應用的方法。在介紹標準SQL語言和Java反射機制時,都不是泛泛而談,而是有針對性地介紹與Hibernate緊密相關(guān)的知識,如SQL連接查詢,以及運用Java反射機制來實現(xiàn)持久化中間件的基本原理。本書的范例程序為了使讀者不但能掌握用Hibernate來持久化Java對象的理論,并且能迅速獲得開發(fā)Hibernate應用的實際經(jīng)驗,徹底掌握并會靈活運用Hibernate技術(shù),本書幾乎為每一章都提供完整的Hibernate應用范例,本書配套光盤中包含所有范例源文件。為了方便初學者能順利地運行本書的范例,光盤上提供的所有范例程序都是可運行的。讀者只要把它們復制到本地機器上,就能夠運行,不需要再做額外的配置。此外,在每個范例的根目錄下還提供了ANT工具的工程文件build.xml,它用于編譯和運行范例程序。本書最后還提供了一個完整的netstore應用例子,它實現(xiàn)了一個購物網(wǎng)站,更加貼近實際應用。本書以netstore應用為例,介紹軟件的MVC框架,控制層與模型層之間通過游離對象來傳輸數(shù)據(jù)的方式,以及模型層采用合理的檢索策略來控制檢索出來的對象圖的深度,從而優(yōu)化應用的性能的技巧。 這本書是否適合您把Java對象持久化到關(guān)系數(shù)據(jù)庫,幾乎是所有企業(yè)Java應用必不可少的重要環(huán)節(jié),因此本書適用于所有從事開發(fā)Java應用的讀者。Hibernate是Java應用和關(guān)系數(shù)據(jù)庫之間的橋梁,閱讀本書,要求讀者具備Java語言和關(guān)系數(shù)據(jù)庫的基礎知識。如果您是開發(fā)Hibernate應用的新手,建議按照本書的先后順序來學習??梢韵葟暮唵蔚腍ibernate應用實例下手,把握開發(fā)Hibernat應用的大致流程,然后逐步深入地了解把對象模型映射到關(guān)系數(shù)據(jù)模型的各種細節(jié)。如果您已經(jīng)在開發(fā)Hibernate應用方面有著豐富的經(jīng)驗,則可以把本書作為實用的Hibernate技術(shù)參考資料。本書深入探討把復雜的對象模型映射到關(guān)系數(shù)據(jù)模型的各種映射方案,詳細介紹通過Hibernate API來操縱數(shù)據(jù)庫的方法。靈活運用本書介紹的Hibernate最新技術(shù),將使您開發(fā)Hibernate應用更加得心應手。實踐是掌握Hibernate的好方法。為了讓讀者徹底掌握并學會靈活運用Hibernate,本書為每一章都提供了典型范例,本書配套光盤中提供了完整的源代碼,以及軟件安裝程序。建議讀者在學習Hibernate技術(shù)的過程中,善于將理論與實踐相結(jié)合,以達到事半功倍的效果。光盤使用說明本書配套光盤包含以下目錄。1.software目錄在該目錄下包含本書內(nèi)容涉及的所有軟件的最新版本的安裝程序,包括:(1)Hibernate核心軟件包(Hibernate 3.3)。(2)Hibernate工具軟件包(HibernateTools 3.2)。(3)MySQL服務器的安裝軟件(MySQL 5)。(4)MySQL的JDBC驅(qū)動程序(Mysql-Connector-Java-3.1.7)(5)ANT的安裝軟件(Ant 1.7)。(6)Tomcat的安裝軟件(Tomcat 6)。(7)JBoss的安裝軟件(JBoss 4)。2.sourcecode目錄在該目錄下提供本書所有的源程序。3.ppt目錄在該目錄下提供由本書作者親自制作的配套語音講座。寫作規(guī)范為了節(jié)省文章的篇幅,在本書中顯示范例的源代碼時,有時做了一些省略。對于Java類,省略顯示package語句和import語句。除了netstore應用外,本書其他范例創(chuàng)建的Java類都位于mypack包下。對于持久化類,還省略顯示了屬性的getXXX()和setXXX()方法。對于對象-關(guān)系映射文件,省略顯示開頭的和元素。但在配套光盤中可獲得完整的源代碼。在本書提供的SQL語句中,表名和字段名都采用大寫形式,而SQL關(guān)鍵字,如select、from、insert、update和delete等,都采用小寫形式。在本書中,有時把運用了Hibernate技術(shù)的Java應用簡稱為Hibernate應用。此外,對象和實例是相同的概念;覆蓋方法、重新定義方法,以及重新實現(xiàn)方法是相同的概念;繼承和擴展是相同的概念;表的記錄和表的數(shù)據(jù)行是相同的概念;表的字段和表的數(shù)據(jù)列是相同的概念;查詢與檢索是相同的概念;持久化類和POJO都是指其實例需要被持久化的基于JavaBean形式的實體域?qū)ο?;對?關(guān)系映射文件和映射文件是相同的概念;本書中的應用服務器主要指J2EE服務器。本書在編寫過程中得到了Hibernate軟件組織和SUN公司在技術(shù)上的大力支持,飛思科技產(chǎn)品研發(fā)中心負責監(jiān)制工作,此外本書第1版的讀者及JavaThinker.org網(wǎng)站的網(wǎng)友為本書的編寫提供了有益的幫助,在此表示衷心的感謝!盡管我們盡了最大努力,但本書難免會有不妥之處,歡迎各界專家和讀者朋友批評指正。以下網(wǎng)址是作者為本書提供的技術(shù)支持網(wǎng)址,讀者可通過它下載與本書相關(guān)的資源(如源代碼、軟件安裝程序和講義等),還可以與其他讀者交流學習心得,以及對本書提出寶貴意見:http://www.javathinker.org/hibernate_support.jsp
內(nèi)容概要
《精通Hibernate:Java對象持久化技術(shù)詳解(第2版)》在第一版基礎上,理論內(nèi)容更新,更加注重理論與實踐的結(jié)合,有大量具有典型性和實用價值的Hibernate應用實例。全書將詳細介紹運用目前最成熟的Hibernate 3.3版本進行Java對象持久化的技術(shù),既能掌握用Hibernate工具對這兩種模型進行映射的技術(shù),又能獲得設計與開發(fā)Java對象模型和關(guān)系數(shù)據(jù)模型的經(jīng)驗。光盤包括《精通Hibernate:Java對象持久化技術(shù)詳解(第2版)》范例源程序、涉及軟件的最新版本的安裝程序,以及配套的語音講座?! 毒℉ibernate:Java對象持久化技術(shù)詳解(第2版)》無論對于Java開發(fā)的新手還是行家來說,都是精通Java對象持久化技術(shù)的必備實用手冊。
作者簡介
孫衛(wèi)琴:知名IT作家的,Java系列暢銷書的作者。1997年畢業(yè)于上海交通大學,隨后從事基于Java的軟件開發(fā)工作,還從事Java方面的培訓和咨詢工作,2002年開始Java技術(shù)領域的創(chuàng)作,其作者深受讀者歡迎。代表作有:《精通Hibernate:Java對象持久化技術(shù)詳解(第2版)》2010-1-13《Tomcat與JavaWeb開發(fā)技術(shù)詳解(第2版)》2009《Java網(wǎng)絡編程精解》2007《Java面向?qū)ο缶幊獭?006《精通Hibernate:Java對象持久化技術(shù)詳解》2005《精通Struts:基于MVC的JavaWeb設計與開發(fā)》2004《Tomcat與JavaWeb開發(fā)技術(shù)詳解》2004《Java2認證考試指南與試題解析》2002
書籍目錄
第1章 Java應用分層架構(gòu)及軟件模型 11.1 應用程序的分層體系結(jié)構(gòu) 11.1.1 區(qū)分物理層和邏輯層 21.1.2 軟件層的特征 31.1.3 軟件分層的優(yōu)點 41.1.4 軟件分層的缺點 41.1.5 Java應用的持久化層 51.2 軟件的模型 61.2.1 概念模型 71.2.2 關(guān)系數(shù)據(jù)模型 81.2.3 域模型 101.2.4 域?qū)ο?101.2.5 域?qū)ο笾g的關(guān)系 111.2.6 域?qū)ο蟮某志没拍?171.3 小結(jié) 191.4 思考題 19第2章 Java對象持久化技術(shù)概述 212.1 直接通過JDBC API來持久化實體域?qū)ο?212.2 ORM簡介 272.2.1 對象-關(guān)系映射的概念 292.2.2 ORM中間件的基本使用方法 312.2.3 常用的ORM中間件 332.3 實體域?qū)ο蟮钠渌志没J?342.3.1 主動域?qū)ο竽J?352.3.2 JDO模式 372.3.3 CMP模式 372.4 Hibernate API簡介 382.4.1 Hibernate的核心接口 392.4.2 事件處理接口 412.4.3 Hibernate映射類型接口 412.4.4 可供擴展的接口 422.5 小結(jié) 432.6 思考題 45第3章 第一個Hibernate應用 473.1 創(chuàng)建Hibernate的配置文件 473.2 創(chuàng)建持久化類 483.3 創(chuàng)建數(shù)據(jù)庫Schema 513.4 創(chuàng)建對象-關(guān)系映射文件 523.4.1 映射文件的文檔類型定義(DTD) 523.4.2 把Customer持久化類映射到CUSTOMERS表 543.5 通過Hibernate API操縱數(shù)據(jù)庫 583.5.1 Hibernate的初始化 613.5.2 訪問Hibernate的Session接口 633.6 運行helloapp應用 673.6.1 創(chuàng)建運行本書范例的系統(tǒng)環(huán)境 673.6.2 創(chuàng)建helloapp應用的目錄結(jié)構(gòu) 723.6.3 把helloapp應用作為獨立應用程序運行 733.6.4 把helloapp應用作為Java Web應用運行 773.7 小結(jié) 783.8 思考題 80第4章 hbm2java和hbm2ddl工具 834.1 創(chuàng)建對象-關(guān)系映射文件 834.1.1 定制持久化類 854.1.2 定制數(shù)據(jù)庫表 884.2 建立項目的目錄結(jié)構(gòu) 904.3 運行hbm2java工具 934.4 運行hbm2ddl工具 944.5 使用XML格式的配置文件 964.6 小結(jié) 974.7 思考題 98第5章 對象-關(guān)系映射基礎 1015.1 持久化類的屬性及訪問方法 1015.1.1 基本類型屬性和包裝類型屬性 1025.1.2 Hibernate訪問持久化類屬性的策略 1045.1.3 在持久化類的訪問方法中加入程序邏輯 1045.1.4 設置派生屬性 1075.1.5 控制insert和update語句 1085.2 處理SQL引用標識符 1095.3 創(chuàng)建命名策略 1105.4 設置數(shù)據(jù)庫Schema 1125.5 設置類的包名 1135.6 運行本章的范例程序 1145.7 小結(jié) 1205.8 思考題 121第6章 映射對象標識符 1236.1 關(guān)系數(shù)據(jù)庫按主鍵區(qū)分不同的記錄 1236.1.1 把主鍵定義為自動增長標識符類型 1236.1.2 從序列(Sequence)中獲取自動增長的標識符 1246.2 Java語言按內(nèi)存地址區(qū)分不同的對象 1256.3 Hibernate用對象標識符(OID)來區(qū)分對象 1266.4 Hibernate的內(nèi)置標識符生成器的用法 1286.4.1 increment標識符生成器 1316.4.2 identity標識符生成器 1336.4.3 sequence標識符生成器 1346.4.4 hilo標識符生成器 1356.4.5 native標識符生成器 1376.5 映射自然主鍵 1386.5.1 映射單個自然主鍵 1386.5.2 映射復合自然主鍵 1406.6 小結(jié) 1436.7 思考題 144第7章 映射一對多關(guān)聯(lián)關(guān)系 1477.1 建立多對一的單向關(guān)聯(lián)關(guān)系 1487.1.1 元素的not-null屬性 1537.1.2 級聯(lián)保存和更新 1557.2 映射一對多雙向關(guān)聯(lián)關(guān)系 1567.2.1 元素的inverse屬性 1617.2.2 級聯(lián)刪除 1637.2.3 父子關(guān)系 1647.3 映射一對多雙向自身關(guān)聯(lián)關(guān)系 1657.4 改進持久化類 1717.5 小結(jié) 1757.6 思考題 176第8章 通過Hibernate操縱對象(上) 1798.1 Java對象在JVM中的生命周期 1798.2 理解Session的緩存 1818.2.1 Session的緩存的作用 1828.2.2 臟檢查及清理緩存的機制 1848.3 Java對象在Hibernate持久化層的狀態(tài) 1878.3.1 臨時對象的特征 1888.3.2 持久化對象的特征 1898.3.3 被刪除對象的特征 1908.3.4 游離對象的特征 1918.4 Session接口的詳細用法 1918.4.1 Session的save()和persist()方法 1918.4.2 Session的load()和get()方法 1948.4.3 Session的update()方法 1958.4.4 Session的saveOrUpdate()方法 1978.4.5 Session的merge()方法 1988.4.6 Session的delete()方法 2008.4.7 Session的replicate()方法 2018.5 級聯(lián)操縱對象圖 2028.5.1 級聯(lián)保存臨時對象 2068.5.2 更新持久化對象 2078.5.3 持久化臨時對象 2078.5.4 更新游離對象 2098.5.5 遍歷對象圖 2108.6 小結(jié) 2118.7 思考題 211第9章 通過Hibernate操縱對象(下) 2159.1 與觸發(fā)器協(xié)同工作 2159.2 利用攔截器(Interceptor)生成審計日志 2179.3 Hibernate的事件處理機制 2249.4 批量處理數(shù)據(jù) 2269.4.1 通過Session來進行批量操作 2279.4.2 通過StatelessSession來進行批量操作 2299.4.3 通過HQL來進行批量操作 2309.4.4 直接通過JDBC API來進行批量操作 2329.5 使用元數(shù)據(jù) 2339.6 通過Hibernate調(diào)用存儲過程 2349.7 小結(jié) 2349.8 思考題 235第10章 映射組成關(guān)系 23710.1 建立精粒度對象模型 23810.2 建立粗粒度關(guān)系數(shù)據(jù)模型 23910.3 映射組成關(guān)系 24010.3.1 區(qū)分值(Value)類型和實體(Entity)類型 24210.3.2 在應用程序中訪問具有組成關(guān)系的持久化類 24410.4 映射復合組成關(guān)系 24710.5 小結(jié) 24810.6 思考題 249第11章 Hibernate的映射類型 25111.1 Hibernate的內(nèi)置映射類型 25111.1.1 Java基本類型的Hibernate映射類型 25111.1.2 Java時間和日期類型的Hibernate映射類型 25211.1.3 Java大對象類型的Hibernate映射類型 25311.1.4 JDK自帶的個別Java類的Hibernate映射類型 25311.1.5 使用Hibernate內(nèi)置映射類型 25411.2 客戶化映射類型 25611.2.1 用客戶化映射類型取代Hibernate組件 26011.2.2 用UserType映射枚舉類型 26311.2.3 實現(xiàn)CompositeUserType接口 26611.2.4 運行本節(jié)范例程序 27111.3 操縱Blob和Clob類型數(shù)據(jù) 27911.4 小結(jié) 28411.5 思考題 284第12章 映射繼承關(guān)系 28712.1 繼承關(guān)系樹的每個具體類對應一個表 28812.1.1 創(chuàng)建映射文件 28912.1.2 操縱持久化對象 29012.2 繼承關(guān)系樹的根類對應一個表 29312.2.1 創(chuàng)建映射文件 29412.2.2 操縱持久化對象 29612.3 繼承關(guān)系樹的每個類對應一個表 29712.3.1 創(chuàng)建映射文件 29812.3.2 操縱持久化對象 30012.4 選擇繼承關(guān)系的映射方式 30212.5 映射多對一多態(tài)關(guān)聯(lián) 30512.6 小結(jié) 30812.7 思考題 309第13章 Java集合類 31113.1 Set(集) 31213.1.1 Set的一般用法 31213.1.2 HashSet類 31313.1.3 TreeSet類 31513.1.4 向Set中加入持久化類的對象 31913.2 List(列表) 32013.3 Map(映射) 32113.4 小結(jié) 32513.5 思考題 326第14章 映射值類型集合 32714.1 映射Set(集) 32714.2 映射Bag(包) 33114.3 映射List(列表) 33414.4 映射Map 33714.5 對集合排序 33914.5.1 在數(shù)據(jù)庫中對集合排序 34014.5.2 在內(nèi)存中對集合排序 34114.6 映射組件類型集合 34514.7 小結(jié) 35014.8 思考題 351第15章 映射實體關(guān)聯(lián)關(guān)系 35315.1 映射一對一關(guān)聯(lián) 35315.1.1 按照外鍵映射 35415.1.2 按照主鍵映射 35815.2 映射單向多對多關(guān)聯(lián) 36115.3 映射雙向多對多關(guān)聯(lián)關(guān)系 36515.3.1 關(guān)聯(lián)兩端使用元素 36615.3.2 在inverse端使用元素 36715.3.3 使用組件類集合 37115.3.4 把多對多關(guān)聯(lián)分解為兩個一對多關(guān)聯(lián) 37615.4 小結(jié) 37815.5 思考題 379第16章 Hibernate的檢索策略 38116.1 Hibernate的檢索策略簡介 38316.2 類級別的檢索策略 38616.2.1 立即檢索 38716.2.2 延遲檢索 38716.3 一對多和多對多關(guān)聯(lián)的檢索策略 39016.3.1 立即檢索(lazy屬性為“false”) 39216.3.2 延遲檢索(lazy屬性為默認值“true”) 39216.3.3 增強延遲檢索(lazy屬性為“extra”) 39316.3.4 批量延遲檢索和批量立即檢索(使用batch-size屬性) 39316.3.5 用帶子查詢的select語句整批量初始化orders集合(fetch屬性為“subselect”) 39616.3.6 迫切左外連接檢索(fetch屬性為“join”) 39716.4 多對一和一對一關(guān)聯(lián)的檢索策略 39816.4.1 迫切左外連接檢索(fetch屬性為“join”) 39816.4.2 延遲檢索(lazy屬性為默認值“proxy”) 40016.4.3 無代理延遲檢索(lazy屬性為“no-proxy”) 40116.4.4 立即檢索(lazy屬性為“false”) 40116.4.5 批量延遲檢索和批量立即檢索(使用batch-size屬性) 40216.5 控制迫切左外連接檢索的深度 40516.6 在應用程序中顯式指定迫切左外連接檢索策略 40816.7 屬性級別的檢索策略 40816.8 小結(jié) 40916.9 思考題 411第17章 Hibernate的檢索方式(上) 41317.1 Hibernate的檢索方式簡介 41317.1.1 HQL檢索方式 41617.1.2 QBC檢索方式 41717.1.3 本地SQL檢索方式 41917.1.4 關(guān)于本章范例程序 42017.1.5 使用別名 42117.1.6 多態(tài)查詢 42117.1.7 對查詢結(jié)果排序 42217.1.8 分頁查詢 42317.1.9 檢索單個對象(uniqueResult()方法) 42417.1.10 按主鍵逐個處理查詢結(jié)果(iterate()方法) 42517.1.11 可滾動的結(jié)果集 42617.1.12 在HQL查詢語句中綁定參數(shù) 42817.1.13 設置查詢附屬事項 43317.1.14 在映射文件中定義命名查詢語句 43617.1.15 在HQL查詢語句中調(diào)用函數(shù) 43817.2 設定查詢條件 43917.2.1 比較運算 44017.2.2 范圍運算 44117.2.3 字符串模式匹配 44217.2.4 邏輯運算 44317.2.5 集合運算 44417.3 小結(jié) 44517.4 思考題 446第18章 Hibernate的檢索方式(下) 44918.1 連接查詢 44918.1.1 默認情況下關(guān)聯(lián)級別的運行時檢索策略 45018.1.2 迫切左外連接 45118.1.3 左外連接 45318.1.4 內(nèi)連接 45718.1.5 迫切內(nèi)連接 46118.1.6 隱式內(nèi)連接 46318.1.7 右外連接 46418.1.8 使用SQL風格的交叉連接和隱式內(nèi)連接 46618.1.9 關(guān)聯(lián)級別運行時的檢索策略 46718.2 投影查詢 46818.3 報表查詢 47118.3.1 使用聚集函數(shù) 47118.3.2 分組查詢 47218.3.3 優(yōu)化報表查詢的性能 47518.4 高級查詢技巧 47518.4.1 動態(tài)查詢 47618.4.2 集合過濾 47818.4.3 子查詢 48018.4.4 本地SQL查詢 48218.4.5 查詢結(jié)果轉(zhuǎn)換器 48418.5 查詢性能優(yōu)化 48618.5.1 iterate()方法 48618.5.2 查詢緩存 48718.6 小結(jié) 48818.7 思考題 489第19章 Hibernate高級配置 49119.1 配置數(shù)據(jù)庫連接池 49119.1.1 使用默認的數(shù)據(jù)庫連接池 49419.1.2 使用配置文件指定的數(shù)據(jù)庫連接池 49519.1.3 從容器中獲得數(shù)據(jù)源 49519.1.4 由Java應用本身提供數(shù)據(jù)庫連接 49719.2 配置事務類型 49719.3 把SessionFactory與JNDI綁定 50019.4 配置日志 50219.5 使用XML格式的配置文件 50519.6 小結(jié) 50719.7 思考題 508第20章 聲明數(shù)據(jù)庫事務 51120.1 數(shù)據(jù)庫事務的概念 51120.2 聲明事務邊界的方式 51320.3 在mysql.exe程序中聲明事務 51520.4 Java應用通過JDBC API聲明JDBC事務 51720.5 Java應用通過Hibernate API聲明JDBC事務 51820.5.1 處理異常 52020.5.2 Session與事務的關(guān)系 52220.5.3 設定事務超時 52520.6 Java應用通過Hibernate API聲明JTA事務 52520.7 Java應用通過JTA API聲明JTA事務 52620.8 小結(jié) 52920.9 思考題 530第21章 處理并發(fā)問題 53321.1 多個事務并發(fā)運行時的并發(fā)問題 53321.1.1 第一類丟失更新 53421.1.2 臟讀 53521.1.3 虛讀 53521.1.4 不可重復讀 53621.1.5 第二類丟失更新 53621.2 數(shù)據(jù)庫系統(tǒng)的鎖的基本原理 53721.2.1 鎖的多粒度性及自動鎖升級 53821.2.2 鎖的類型和兼容性 53821.2.3 死鎖及其防止辦法 54021.3 數(shù)據(jù)庫的事務隔離級別 54121.3.1 在mysql.exe程序中設置隔離級別 54321.3.2 在應用程序中設置隔離級別 54321.4 在應用程序中采用悲觀鎖 54421.4.1 利用數(shù)據(jù)庫系統(tǒng)的獨占鎖來實現(xiàn)悲觀鎖 54421.4.2 由應用程序?qū)崿F(xiàn)悲觀鎖 55021.5 利用Hibernate的版本控制來實現(xiàn)樂觀鎖 55021.5.1 使用元素 55121.5.2 使用元素 55621.5.3 對游離對象進行版本檢查 55821.5.4 強制更新版本 55921.6 實現(xiàn)樂觀鎖的其他方法 55921.7 小結(jié) 56021.8 思考題 561第22章 管理Hibernate的緩存 56322.1 緩存的基本原理 56322.1.1 持久化層的緩存的范圍 56422.1.2 持久化層的緩存的并發(fā)訪問策略 56622.2 Hibernate的二級緩存結(jié)構(gòu) 56822.3 管理Hibernate的第一級緩存 56922.4 管理Hibernate的第二級緩存 57022.4.1 配置進程范圍內(nèi)的第二級緩存 57122.4.2 配置集群范圍內(nèi)的第二級緩存 57522.4.3 在應用程序中管理第二級緩存 57822.4.4 Session與第二級緩存的交互模式 57822.5 運行本章的范例程序 57922.6 小結(jié) 58322.7 思考題 584第23章 管理Session和實現(xiàn)對話 58723.1 管理Session對象的生命周期 58723.1.1 Session對象的生命周期與本地線程綁定 59023.1.2 Session對象的生命周期與JTA事務綁定 59223.2 實現(xiàn)對話 59323.2.1 使用游離對象 59523.2.2 使用手工清理緩存模式下的Session 59723.3 小結(jié) 60323.4 思考題 605第24章 Hibernate與Struts框架 60724.1 實現(xiàn)業(yè)務數(shù)據(jù) 60924.2 實現(xiàn)業(yè)務邏輯 61224.3 netstore應用的訂單業(yè)務 62224.4 小結(jié) 626第25章 Hibernate與EJB組件 62925.1 創(chuàng)建EJB組件 62925.1.1 編寫Remote接口 62925.1.2 編寫Home接口 63125.1.3 編寫Enterprise Java Bean類 63125.2 在業(yè)務代理類中訪問EJB組件 63325.3 發(fā)布J2EE應用 63825.3.1 在JBoss上部署EJB組件 63825.3.2 在JBoss上部署Web應用 63925.3.3 在JBoss上部署J2EE應用 64025.4 小結(jié) 642附錄A 標準SQL語言的用法 643A.1 數(shù)據(jù)完整性 644A.1.1 實體完整性 644A.1.2 域完整性 644A.1.3 參照完整性 644A.2 DDL數(shù)據(jù)定義語言 644A.3 DML數(shù)據(jù)操縱語言 646A.4 DQL數(shù)據(jù)查詢語言 647A.4.1 簡單查詢 648A.4.2 連接查詢 648A.4.3 子查詢 651A.4.4 聯(lián)合查詢 652A.4.5 報表查詢 652附錄B Java語言的反射機制 655B.1 Java Reflection API簡介 655B.2 運用反射機制來持久化Java對象 658附錄C 用XDoclet工具生成映射文件 665C.1 創(chuàng)建帶有@hibernate標記的Java源文件 665C.2 建立項目的目錄結(jié)構(gòu) 669C.3 運行XDoclet工具 672附錄D 發(fā)布和運行netstore應用 675D.1 運行netstore所需的軟件 675D.2 netstore應用的目錄結(jié)構(gòu) 676D.3 安裝SAMPLEDB數(shù)據(jù)庫 677D.4 安裝和配置JBoss服務器 677D.5 發(fā)布netstore應用 679D.5.1 在工作模式1下發(fā)布netstore應用 679D.5.2 在工作模式2下發(fā)布netstore應用 679D.6 運行netstore應用 680附錄E Hibernate 3升級指南 685E.1 Hibernate API 變化 685E.1.1 包名 685E.1.2 org.hibernate.classic包 685E.1.3 Hibernate所依賴的第三方軟件包 686E.1.4 異常模型 686E.1.5 Session接口 686E.1.6 createSQLQuery() 687E.1.7 Lifecycle 和 Validatable 接口 687E.1.8 Interceptor接口 687E.1.9 UserType和CompositeUserType接口 687E.1.10 FetchMode類 688E.1.11 PersistentEnum類 688E.1.12 對Blob 和Clob的支持 688E.1.13 Hibernate中供擴展的API的變化 688E.2 元數(shù)據(jù)的變化 688E.2.1 檢索策略 688E.2.2 對象標識符的映射 688E.2.3 集合映射 689E.2.4 DTD 689E.3 查詢語句的變化 689E.4 把Hibernate 2應用升級到Hibernate 3應用 690附錄F 思考題答案 691參考文獻 693
章節(jié)摘錄
第9章 通過Hibernate操縱對象(下) 9.1 與觸發(fā)器協(xié)同工作 數(shù)據(jù)庫系統(tǒng)有時會利用觸發(fā)器來完成某些業(yè)務規(guī)則。觸發(fā)器在接收到特定的事件時被激發(fā),執(zhí)行事先定義好的一組數(shù)據(jù)庫操作。能激發(fā)觸發(fā)器運行的事件可分為以下幾種: 插入記錄事件,即執(zhí)行insert語句?! 「掠涗浭录磮?zhí)行update語句?! h除記錄事件,即執(zhí)行delete語句?! ‘擧ibernate與數(shù)據(jù)庫中的觸發(fā)器協(xié)同工作時,會造成兩類問題:觸發(fā)器使Session的緩存中的持久化對象與數(shù)據(jù)庫中對應數(shù)據(jù)不一致?! ession的update()方法盲目地激發(fā)觸發(fā)器?! ∠旅娣謩e介紹出現(xiàn)這兩類問題的原因及解決辦法?! ?.觸發(fā)器使Session緩存中的數(shù)據(jù)與數(shù)據(jù)庫不一致 當Session向數(shù)據(jù)庫中保存、更新或刪除對象時,如果會激發(fā)數(shù)據(jù)庫中的某個觸發(fā)器,常常會帶來~個問題,那就是Session緩存中的持久化對象無法與數(shù)據(jù)庫中的數(shù)據(jù)保持同步。出現(xiàn)這一問題的原因在于觸發(fā)器運行在數(shù)據(jù)庫中,它執(zhí)行的操作對Session是透明的,假如在Session的緩存中已經(jīng)存在一個Customer對象,接下來當觸發(fā)器修改數(shù)據(jù)庫中CUSTOMERS表的相應記錄時,Session無法檢測到數(shù)據(jù)庫中數(shù)據(jù)的變化,因此Session不會自動刷新緩存中的Customer對象。下面舉例說明。
編輯推薦
凝聚Java魅力,成就開發(fā)專家看清Java萬花筒的本質(zhì),從復雜的表象中尋找普遍的規(guī)律,深刻理解Java的核心思想本書在第1版的基礎上,并結(jié)合作者多年經(jīng)驗,將更新的理論知識,精心細致地介紹最新技術(shù)應用。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載