精通Hibernate

出版時間:2010-2  出版社:孫衛(wèi)琴 電子工業(yè)出版社 (2010-02出版)  作者:孫衛(wèi)琴  頁數(shù):716  
Tag標(biāo)簽:無  

前言

在如今的企業(yè)級應(yīng)用開發(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ū)ο蟮摹ο蠛完P(guān)系數(shù)據(jù)其實是業(yè)務(wù)實體的兩種表現(xiàn)形式。業(yè)務(wù)實體在內(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),這是一項煩瑣耗時的工作。在實際應(yīng)用中,除了需要把內(nèi)存中的對象持久化到數(shù)據(jù)庫外,還需要把數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)再重新加載到內(nèi)存中,以滿足用戶查詢業(yè)務(wù)數(shù)據(jù)的需求。頻繁地訪問數(shù)據(jù)庫,會對應(yīng)用的性能造成很大影響。為了降低訪問數(shù)據(jù)庫的頻率,可以把需要經(jīng)常被訪問的業(yè)務(wù)數(shù)據(jù)存放在緩存中,并且通過特定的機制來保證緩存中的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)同步。在Java領(lǐng)域,可以直接通過JDBC編程來訪問數(shù)據(jù)庫。JDBC可以說是訪問關(guān)系數(shù)據(jù)庫的最原始、最直接的方法。這種方式的優(yōu)點是運行效率高,缺點是在Java程序代碼中嵌入大量SQL語句,使得項目難以維護。在開發(fā)企業(yè)級應(yīng)用時,可以通過JDBC編程來開發(fā)單獨的持久化層,把數(shù)據(jù)庫訪問操作封裝起來,提供簡潔的API,供業(yè)務(wù)層統(tǒng)一調(diào)用。但是,如果關(guān)系數(shù)據(jù)模型非常復(fù)雜,那么直接通過JDBC編程來實現(xiàn)持久化層就需要有專業(yè)的知識。對于企業(yè)應(yīng)用的開發(fā)人員,花費大量時間從頭開發(fā)自己的持久化層不是很可行的。幸運的是,目前在持久化層已經(jīng)有好多種現(xiàn)成的持久化中間件可供選用,有些是商業(yè)性的,如TopLink;有些是非商業(yè)性的,如JDO和Hibernate。Hibernate是一個基于Java的開放源代碼的持久化中間件,它對JDBC做了輕量級封裝,不僅提供ORM映射服務(wù),還提供數(shù)據(jù)查詢和數(shù)據(jù)緩存功能,Java開發(fā)人員可以方便地通過Hibernate API來操縱數(shù)據(jù)庫?,F(xiàn)在,越來越多的Java開發(fā)人員把Hibernate作為企業(yè)應(yīng)用和關(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應(yīng)用,而且還可在J2EE架構(gòu)中取代CMP(Container-managered Persistence,由容器管理持久化),完成對象持久化的重任,Hibernate能集成到會話EJB和基于BMP的實體EJB中,BMP(Bean- managered Persistence)是指由實體EJB本身管理持久化。(7)Hibernate可以和多種Web服務(wù)器、應(yīng)用服務(wù)器良好集成,并且支持幾乎所有流行的數(shù)據(jù)庫服務(wù)器。本書結(jié)合大量典型的實例,詳細介紹運用目前最成熟的Hibernate 3.3版本進行Java對象持久化的技術(shù)。Hibernate是連接Java對象模型和關(guān)系數(shù)據(jù)模型的橋梁,通過本書,讀者不僅能掌握用Hibernate工具對這兩種模型進行映射的技術(shù),還能獲得設(shè)計與開發(fā)Java對象模型和關(guān)系數(shù)據(jù)模型的先進經(jīng)驗。 本書的組織結(jié)構(gòu)和主要內(nèi)容本書按照由淺入深、前后照應(yīng)的順序來安排內(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應(yīng)用實例—helloapp應(yīng)用為例,引導(dǎo)讀者把握設(shè)計、開發(fā)和部署Hibernate應(yīng)用的整體流程,理解Hibernate在分層的軟件結(jié)構(gòu)中所處的位置。對于已經(jīng)在Java對象持久化領(lǐng)域有一定工作經(jīng)驗的開發(fā)人員,可以從第1章和第2章入手,高屋建瓴地把握持久化領(lǐng)域的各種理論,對于新手,不妨先閱讀第3章,以便快速獲得開發(fā)Hibernate應(yīng)用的實際經(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)系映射的基礎(chǔ)知識。第6章:介紹對象標(biāo)識符的映射方法。第7章:介紹一對多關(guān)聯(lián)關(guān)系的映射方法。第10章:介紹組成關(guān)系的映射方法。第11章:介紹Java類型、SQL類型和Hibernate映射類型之間的對應(yīng)關(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應(yīng)用程序的必要條件。第9章介紹Hibernate與觸發(fā)器協(xié)同工作的技巧、攔截器(Interceptor)的用法,以及擴展Hibernate的事件監(jiān)聽器的方法。此外,還介紹Hibernate提供的批量處理數(shù)據(jù)的各種方法。第23章介紹Session的生命周期的管理方式,以及會話的實現(xiàn)方式。這一章的內(nèi)容將幫助讀者簡化Hibernate應(yīng)用的程序代碼,并且為應(yīng)用設(shè)計合理的軟件架構(gòu)。5.Hibernate的檢索策略和檢索方式(第16、17和18章)第16章介紹Hibernate的各種檢索策略,對每一種檢索策略,都介紹它的適用場合。第17章和第18章介紹HQL查詢語句的語法,以及QBC API的使用方法。合理運用Hibernate的檢索策略及檢索技巧,是提高Hibernate應(yīng)用性能的重要手段。6.?dāng)?shù)據(jù)庫事務(wù)、并發(fā)、緩存與性能優(yōu)化(第20、21和22章)第20章先介紹數(shù)據(jù)庫事務(wù)的概念,接著介紹運用Hibernate API和JTA API來聲明事務(wù)邊界的方法。第21章介紹在并發(fā)環(huán)境中出現(xiàn)的各種并發(fā)問題,然后介紹采用Hibernate的悲觀鎖,以及版本控制功能來避免并發(fā)問題的方法。第22章介紹Hibernate的二級緩存機制,并介紹如何根據(jù)實際需要來配置Hibernate的第二級緩存,以提高應(yīng)用的性能。7.Hibernate高級配置(第19章)第19章主要介紹Hibernate應(yīng)用的兩種運行環(huán)境:受管理環(huán)境與不受管理環(huán)境,然后介紹在這兩種環(huán)境中配置數(shù)據(jù)庫連接池、SessionFactory實例及事務(wù)的方法。8.綜合實例(第24、25章)第24章和第25章介紹一個名為netstore應(yīng)用的電子商務(wù)網(wǎng)站的實例,netstore應(yīng)用是利用Struts作為Java Web框架,用Hibernate來完成對象持久化的任務(wù),并且分別用普通的JavaBean及EJB組件來實現(xiàn)業(yè)務(wù)邏輯。9.附錄本書的附錄介紹標(biāo)準(zhǔn)SQL語言的主要用法、Java的反射機制、XDoclet工具的用法,以及把Hibernate 2應(yīng)用升級到Hibernate 3應(yīng)用的方法。在介紹標(biāo)準(zhǔn)SQL語言和Java反射機制時,都不是泛泛而談,而是有針對性地介紹與Hibernate緊密相關(guān)的知識,如SQL連接查詢,以及運用Java反射機制來實現(xiàn)持久化中間件的基本原理。本書的范例程序為了使讀者不但能掌握用Hibernate來持久化Java對象的理論,并且能迅速獲得開發(fā)Hibernate應(yīng)用的實際經(jīng)驗,徹底掌握并會靈活運用Hibernate技術(shù),本書幾乎為每一章都提供完整的Hibernate應(yīng)用范例,本書配套光盤中包含所有范例源文件。為了方便初學(xué)者能順利地運行本書的范例,光盤上提供的所有范例程序都是可運行的。讀者只要把它們復(fù)制到本地機器上,就能夠運行,不需要再做額外的配置。此外,在每個范例的根目錄下還提供了ANT工具的工程文件build.xml,它用于編譯和運行范例程序。本書最后還提供了一個完整的netstore應(yīng)用例子,它實現(xiàn)了一個購物網(wǎng)站,更加貼近實際應(yīng)用。本書以netstore應(yīng)用為例,介紹軟件的MVC框架,控制層與模型層之間通過游離對象來傳輸數(shù)據(jù)的方式,以及模型層采用合理的檢索策略來控制檢索出來的對象圖的深度,從而優(yōu)化應(yīng)用的性能的技巧。 這本書是否適合您把Java對象持久化到關(guān)系數(shù)據(jù)庫,幾乎是所有企業(yè)Java應(yīng)用必不可少的重要環(huán)節(jié),因此本書適用于所有從事開發(fā)Java應(yīng)用的讀者。Hibernate是Java應(yīng)用和關(guān)系數(shù)據(jù)庫之間的橋梁,閱讀本書,要求讀者具備Java語言和關(guān)系數(shù)據(jù)庫的基礎(chǔ)知識。如果您是開發(fā)Hibernate應(yīng)用的新手,建議按照本書的先后順序來學(xué)習(xí)。可以先從簡單的Hibernate應(yīng)用實例下手,把握開發(fā)Hibernat應(yīng)用的大致流程,然后逐步深入地了解把對象模型映射到關(guān)系數(shù)據(jù)模型的各種細節(jié)。如果您已經(jīng)在開發(fā)Hibernate應(yīng)用方面有著豐富的經(jīng)驗,則可以把本書作為實用的Hibernate技術(shù)參考資料。本書深入探討把復(fù)雜的對象模型映射到關(guān)系數(shù)據(jù)模型的各種映射方案,詳細介紹通過Hibernate API來操縱數(shù)據(jù)庫的方法。靈活運用本書介紹的Hibernate最新技術(shù),將使您開發(fā)Hibernate應(yīng)用更加得心應(yīng)手。實踐是掌握Hibernate的好方法。為了讓讀者徹底掌握并學(xué)會靈活運用Hibernate,本書為每一章都提供了典型范例,本書配套光盤中提供了完整的源代碼,以及軟件安裝程序。建議讀者在學(xué)習(xí)Hibernate技術(shù)的過程中,善于將理論與實踐相結(jié)合,以達到事半功倍的效果。光盤使用說明本書配套光盤包含以下目錄。1.software目錄在該目錄下包含本書內(nèi)容涉及的所有軟件的最新版本的安裝程序,包括:(1)Hibernate核心軟件包(Hibernate 3.3)。(2)Hibernate工具軟件包(HibernateTools 3.2)。(3)MySQL服務(wù)器的安裝軟件(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應(yīng)用外,本書其他范例創(chuàng)建的Java類都位于mypack包下。對于持久化類,還省略顯示了屬性的getXXX()和setXXX()方法。對于對象-關(guān)系映射文件,省略顯示開頭的和元素。但在配套光盤中可獲得完整的源代碼。在本書提供的SQL語句中,表名和字段名都采用大寫形式,而SQL關(guān)鍵字,如select、from、insert、update和delete等,都采用小寫形式。在本書中,有時把運用了Hibernate技術(shù)的Java應(yīng)用簡稱為Hibernate應(yīng)用。此外,對象和實例是相同的概念;覆蓋方法、重新定義方法,以及重新實現(xiàn)方法是相同的概念;繼承和擴展是相同的概念;表的記錄和表的數(shù)據(jù)行是相同的概念;表的字段和表的數(shù)據(jù)列是相同的概念;查詢與檢索是相同的概念;持久化類和POJO都是指其實例需要被持久化的基于JavaBean形式的實體域?qū)ο?;對?關(guān)系映射文件和映射文件是相同的概念;本書中的應(yīng)用服務(wù)器主要指J2EE服務(wù)器。本書在編寫過程中得到了Hibernate軟件組織和SUN公司在技術(shù)上的大力支持,飛思科技產(chǎn)品研發(fā)中心負責(zé)監(jiān)制工作,此外本書第1版的讀者及JavaThinker.org網(wǎng)站的網(wǎng)友為本書的編寫提供了有益的幫助,在此表示衷心的感謝!盡管我們盡了最大努力,但本書難免會有不妥之處,歡迎各界專家和讀者朋友批評指正。以下網(wǎng)址是作者為本書提供的技術(shù)支持網(wǎng)址,讀者可通過它下載與本書相關(guān)的資源(如源代碼、軟件安裝程序和講義等),還可以與其他讀者交流學(xué)習(xí)心得,以及對本書提出寶貴意見:http://www.javathinker.org/hibernate_support.jsp

內(nèi)容概要

  《精通Hibernate:Java對象持久化技術(shù)詳解(第2版)》在第一版基礎(chǔ)上,理論內(nèi)容更新,更加注重理論與實踐的結(jié)合,有大量具有典型性和實用價值的Hibernate應(yīng)用實例。全書將詳細介紹運用目前最成熟的Hibernate 3.3版本進行Java對象持久化的技術(shù),既能掌握用Hibernate工具對這兩種模型進行映射的技術(shù),又能獲得設(shè)計與開發(fā)Java對象模型和關(guān)系數(shù)據(jù)模型的經(jīng)驗。光盤包括《精通Hibernate:Java對象持久化技術(shù)詳解(第2版)》范例源程序、涉及軟件的最新版本的安裝程序,以及配套的語音講座。  《精通Hibernate:Java對象持久化技術(shù)詳解(第2版)》無論對于Java開發(fā)的新手還是行家來說,都是精通Java對象持久化技術(shù)的必備實用手冊。

作者簡介

孫衛(wèi)琴:知名IT作家的,Java系列暢銷書的作者。1997年畢業(yè)于上海交通大學(xué),隨后從事基于Java的軟件開發(fā)工作,還從事Java方面的培訓(xùn)和咨詢工作,2002年開始Java技術(shù)領(lǐng)域的創(chuàng)作,其作者深受讀者歡迎。代表作有:《精通Hibernate:Java對象持久化技術(shù)詳解(第2版)》2010-1-13《Tomcat與JavaWeb開發(fā)技術(shù)詳解(第2版)》2009《Java網(wǎng)絡(luò)編程精解》2007《Java面向?qū)ο缶幊獭?006《精通Hibernate:Java對象持久化技術(shù)詳解》2005《精通Struts:基于MVC的JavaWeb設(shè)計與開發(fā)》2004《Tomcat與JavaWeb開發(fā)技術(shù)詳解》2004《Java2認證考試指南與試題解析》2002

書籍目錄

第1章  Java應(yīng)用分層架構(gòu)及軟件模型 11.1  應(yīng)用程序的分層體系結(jié)構(gòu) 11.1.1  區(qū)分物理層和邏輯層 21.1.2  軟件層的特征 31.1.3  軟件分層的優(yōu)點 41.1.4  軟件分層的缺點 41.1.5  Java應(yīng)用的持久化層 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應(yīng)用 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應(yīng)用 673.6.1  創(chuàng)建運行本書范例的系統(tǒng)環(huán)境 673.6.2  創(chuàng)建helloapp應(yīng)用的目錄結(jié)構(gòu) 723.6.3  把helloapp應(yīng)用作為獨立應(yīng)用程序運行 733.6.4  把helloapp應(yīng)用作為Java Web應(yīng)用運行 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)系映射基礎(chǔ) 1015.1  持久化類的屬性及訪問方法 1015.1.1  基本類型屬性和包裝類型屬性 1025.1.2  Hibernate訪問持久化類屬性的策略 1045.1.3  在持久化類的訪問方法中加入程序邏輯 1045.1.4  設(shè)置派生屬性 1075.1.5  控制insert和update語句 1085.2  處理SQL引用標(biāo)識符 1095.3  創(chuàng)建命名策略 1105.4  設(shè)置數(shù)據(jù)庫Schema 1125.5  設(shè)置類的包名 1135.6  運行本章的范例程序 1145.7  小結(jié) 1205.8  思考題 121第6章  映射對象標(biāo)識符 1236.1  關(guān)系數(shù)據(jù)庫按主鍵區(qū)分不同的記錄 1236.1.1  把主鍵定義為自動增長標(biāo)識符類型 1236.1.2  從序列(Sequence)中獲取自動增長的標(biāo)識符 1246.2  Java語言按內(nèi)存地址區(qū)分不同的對象 1256.3  Hibernate用對象標(biāo)識符(OID)來區(qū)分對象 1266.4  Hibernate的內(nèi)置標(biāo)識符生成器的用法 1286.4.1  increment標(biāo)識符生成器 1316.4.2  identity標(biāo)識符生成器 1336.4.3  sequence標(biāo)識符生成器 1346.4.4  hilo標(biāo)識符生成器 1356.4.5  native標(biāo)識符生成器 1376.5  映射自然主鍵 1386.5.1  映射單個自然主鍵 1386.5.2  映射復(fù)合自然主鍵 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  在應(yīng)用程序中訪問具有組成關(guān)系的持久化類 24410.4  映射復(fù)合組成關(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)系樹的每個具體類對應(yīng)一個表 28812.1.1  創(chuàng)建映射文件 28912.1.2  操縱持久化對象 29012.2  繼承關(guān)系樹的根類對應(yīng)一個表 29312.2.1  創(chuàng)建映射文件 29412.2.2  操縱持久化對象 29612.3  繼承關(guān)系樹的每個類對應(yīng)一個表 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  在應(yīng)用程序中顯式指定迫切左外連接檢索策略 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  設(shè)置查詢附屬事項 43317.1.14  在映射文件中定義命名查詢語句 43617.1.15  在HQL查詢語句中調(diào)用函數(shù) 43817.2  設(shè)定查詢條件 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風(fēng)格的交叉連接和隱式內(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應(yīng)用本身提供數(shù)據(jù)庫連接 49719.2  配置事務(wù)類型 49719.3  把SessionFactory與JNDI綁定 50019.4  配置日志 50219.5  使用XML格式的配置文件 50519.6  小結(jié) 50719.7  思考題 508第20章 聲明數(shù)據(jù)庫事務(wù) 51120.1  數(shù)據(jù)庫事務(wù)的概念 51120.2  聲明事務(wù)邊界的方式 51320.3  在mysql.exe程序中聲明事務(wù) 51520.4  Java應(yīng)用通過JDBC API聲明JDBC事務(wù) 51720.5  Java應(yīng)用通過Hibernate API聲明JDBC事務(wù) 51820.5.1  處理異常 52020.5.2  Session與事務(wù)的關(guān)系 52220.5.3  設(shè)定事務(wù)超時 52520.6  Java應(yīng)用通過Hibernate API聲明JTA事務(wù) 52520.7  Java應(yīng)用通過JTA API聲明JTA事務(wù) 52620.8  小結(jié) 52920.9  思考題 530第21章  處理并發(fā)問題 53321.1  多個事務(wù)并發(fā)運行時的并發(fā)問題 53321.1.1  第一類丟失更新 53421.1.2  臟讀 53521.1.3  虛讀 53521.1.4  不可重復(fù)讀 53621.1.5  第二類丟失更新 53621.2  數(shù)據(jù)庫系統(tǒng)的鎖的基本原理 53721.2.1  鎖的多粒度性及自動鎖升級 53821.2.2  鎖的類型和兼容性 53821.2.3  死鎖及其防止辦法 54021.3  數(shù)據(jù)庫的事務(wù)隔離級別 54121.3.1  在mysql.exe程序中設(shè)置隔離級別 54321.3.2  在應(yīng)用程序中設(shè)置隔離級別 54321.4  在應(yīng)用程序中采用悲觀鎖 54421.4.1  利用數(shù)據(jù)庫系統(tǒng)的獨占鎖來實現(xiàn)悲觀鎖 54421.4.2  由應(yīng)用程序?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  在應(yīng)用程序中管理第二級緩存 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事務(wù)綁定 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è)務(wù)數(shù)據(jù) 60924.2  實現(xiàn)業(yè)務(wù)邏輯 61224.3  netstore應(yīng)用的訂單業(yè)務(wù) 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è)務(wù)代理類中訪問EJB組件  63325.3  發(fā)布J2EE應(yīng)用  63825.3.1  在JBoss上部署EJB組件  63825.3.2  在JBoss上部署Web應(yīng)用  63925.3.3  在JBoss上部署J2EE應(yīng)用  64025.4  小結(jié)  642附錄A  標(biāo)準(zhǔn)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標(biāo)記的Java源文件  665C.2  建立項目的目錄結(jié)構(gòu)  669C.3  運行XDoclet工具  672附錄D  發(fā)布和運行netstore應(yīng)用  675D.1  運行netstore所需的軟件  675D.2  netstore應(yīng)用的目錄結(jié)構(gòu)  676D.3  安裝SAMPLEDB數(shù)據(jù)庫  677D.4  安裝和配置JBoss服務(wù)器  677D.5  發(fā)布netstore應(yīng)用  679D.5.1  在工作模式1下發(fā)布netstore應(yīng)用  679D.5.2  在工作模式2下發(fā)布netstore應(yīng)用  679D.6  運行netstore應(yīng)用  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  對象標(biāo)識符的映射  688E.2.3  集合映射  689E.2.4  DTD  689E.3  查詢語句的變化  689E.4  把Hibernate 2應(yīng)用升級到Hibernate 3應(yīng)用  690附錄F  思考題答案  691參考文獻  693

章節(jié)摘錄

  第9章 通過Hibernate操縱對象(下)  9.1 與觸發(fā)器協(xié)同工作  數(shù)據(jù)庫系統(tǒng)有時會利用觸發(fā)器來完成某些業(yè)務(wù)規(guī)則。觸發(fā)器在接收到特定的事件時被激發(fā),執(zhí)行事先定義好的一組數(shù)據(jù)庫操作。能激發(fā)觸發(fā)器運行的事件可分為以下幾種:  插入記錄事件,即執(zhí)行insert語句?! 「掠涗浭录?,即執(zhí)行update語句。  刪除記錄事件,即執(zhí)行delete語句?! ‘?dāng)Hibernate與數(shù)據(jù)庫中的觸發(fā)器協(xié)同工作時,會造成兩類問題:觸發(fā)器使Session的緩存中的持久化對象與數(shù)據(jù)庫中對應(yīng)數(shù)據(jù)不一致?! ession的update()方法盲目地激發(fā)觸發(fā)器?! ∠旅娣謩e介紹出現(xiàn)這兩類問題的原因及解決辦法?! ?.觸發(fā)器使Session緩存中的數(shù)據(jù)與數(shù)據(jù)庫不一致  當(dāng)Session向數(shù)據(jù)庫中保存、更新或刪除對象時,如果會激發(fā)數(shù)據(jù)庫中的某個觸發(fā)器,常常會帶來~個問題,那就是Session緩存中的持久化對象無法與數(shù)據(jù)庫中的數(shù)據(jù)保持同步。出現(xiàn)這一問題的原因在于觸發(fā)器運行在數(shù)據(jù)庫中,它執(zhí)行的操作對Session是透明的,假如在Session的緩存中已經(jīng)存在一個Customer對象,接下來當(dāng)觸發(fā)器修改數(shù)據(jù)庫中CUSTOMERS表的相應(yīng)記錄時,Session無法檢測到數(shù)據(jù)庫中數(shù)據(jù)的變化,因此Session不會自動刷新緩存中的Customer對象。下面舉例說明。

編輯推薦

凝聚Java魅力,成就開發(fā)專家看清Java萬花筒的本質(zhì),從復(fù)雜的表象中尋找普遍的規(guī)律,深刻理解Java的核心思想本書在第1版的基礎(chǔ)上,并結(jié)合作者多年經(jīng)驗,將更新的理論知識,精心細致地介紹最新技術(shù)應(yīng)用。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    精通Hibernate PDF格式下載


用戶評論 (總計16條)

 
 

  •   有點普通,而且代碼的編寫風(fēng)格很另類,我個人是很難接受了。不值?。?!
  •   hibernate到目前已經(jīng)進入4時代了,對于注解的使用還是沒有介紹很多。但對于未對hibernate基礎(chǔ)知識做過了解的程序員來說還是值得購買的。方便大家了解持久化對象關(guān)系的映射方法,實際問題的不同映射,級聯(lián)及加載方式的特性,最后就是CRUD的操作原理。如果自己英語稍有基礎(chǔ),可以下載hibernate4的壓縮包,解壓后有文檔。如果對注解annotation不是很了解,可以找到hibernate3.6的版本,有annotation的文檔。再配合API,使用注解方式映射對象到數(shù)據(jù)庫是相當(dāng)方便的。此書適合模棱兩可的人和毫無經(jīng)驗的人購買。
  •   到第19章才有hibernate.cfg.xml的講解, 而且是高級配置, 真心搞不懂5~18單的項目, 不需要配置xml文件嗎.每一章的知識點講得都很散, 單拿出來一條看還勉強理解, 想綜合運用起來, 跟本拼不到一塊去.19章關(guān)于數(shù)據(jù)源的配置, 講了數(shù)據(jù)源的這個配置,那個配置, 到最后總結(jié)的時候也沒說倒底怎么個用法.我要是自己能配起來個數(shù)據(jù)源, 那些個參數(shù)看字面我也能懂了, 還用你一個個翻譯成中文.總的來說, 這本書, 高手不需看, 菜鳥看懂了也不會用.
  •   通俗易懂,學(xué)的很順暢
  •   內(nèi)容實用 好理解 老師也推薦用這本書
  •   書籍不是新書,已經(jīng)很臟,光盤不是本書光盤
  •   書很好,我很喜歡。書里頭的內(nèi)容很詳細,也分出了常用的東西??梢援?dāng)工具書用。
  •   描述準(zhǔn)確,語言生動。為數(shù)不多的文字不晦澀,引用翻譯部分不別扭的技術(shù)書。
  •   挺好的,一直想看的一本書,三大主流框架之一。。。。。。。。。。。。
  •   精通Hibernate:Java對象持久化技術(shù)詳解是一本好書
  •   適合初學(xué)者,她的書也很細致
  •   灰?;页:?,期待已久
  •   連注解都沒有說明,內(nèi)容太老啦
  •   書不錯,光盤很贊。當(dāng)工具書了。
  •   真的不錯,對一個初學(xué)者來說,很全面的講解
  •   書內(nèi)容不錯 可是書是破爛的。。。。
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7