産品特色
編輯推薦
本書分為五個主要部分。
在第Ⅰ部分“ORM入門”中,我們將探討對象/關係映射背後的基礎。
第Ⅱ部分“映射策略”專注於Java類及其屬性,以及它們如何映射到SQL錶和列。
第Ⅲ部分“事務性數據處理”完全與使用Hibernate和Java持久化加載與存儲數據有關。
第Ⅳ部分“編寫查詢”將介紹數據查詢功能,並詳盡講解查詢語言和API。
第Ⅴ部分“構建應用程序”將探討分層和有會話意識的Java數據庫應用程序的設計與實現。
內容簡介
持久化——數據在程序實例之外留存的功能——是現代應用程序的核心。Hibernate是流行的Java持久化工具,提供瞭自動且透明的對象/關係映射,使得在Java應用程序中使用SQL數據庫變得輕而易舉。
《Hibernate實戰(第2版)》通過開發一個將數百個單獨示例聯係起來的應用程序來探究Hibernate。你將直接深入到Hibernate的富編程模型之中,貫穿映射、查詢、抓取策略、事務、會話、緩存以及更多其他內容。書中圖文並茂地介紹瞭數據庫設計和優化技術的實踐。在本書中,作者詳盡介紹瞭具有Java持久化2.1標準的Hibernate 5(JSR 338)。所有的示例都已經被更新,以便用於新的Hibernate和Java EE規範版本。
主要內容
◆ 對象/關係映射概念
◆ 有效的數據庫應用程序設計
◆ 全麵的Hibernate與Java持久化介紹
◆ Java持久化與EJB、CDI、JSF和JAX-RS的集成
◆ 無與倫比的廣度和深度
本書假設讀者具有Java的使用經驗。
作者簡介
Christian Bauer,是Hibernate開發者團隊的一員,他是一位培訓師和顧問。Gavin King是Hibernate項目的發起者以及最初的Java持久化專傢組(JSR 220)的一員。他還主導瞭CDI的
標準化工作(JSR 299)。Gavin目前正在創建名為Ceylon的新編程語言。Gary Gregory是Rocket Software的首席軟件工程師,他緻力於應用程序服務器和遺留係統的集成。他是Manning齣版社JUnit in Action和Spring Batch in Action這兩本書的閤著者,並且是Apache軟件基金會項目:Commons、HttpComponents、Logging Services和Xalan的項目管理委員會的一員。
內頁插圖
目錄
第Ⅰ部分 ORM入門
第1章 理解對象/關係持久化 1
1.1 持久化的定義 4
1.1.1 關係型數據庫 4
1.1.2 理解SQL 5
1.1.3 在Java中使用SQL 5
1.2 範式不匹配 7
1.2.1 粒度問題 8
1.2.2 子類型問題 10
1.2.3 標識問題 11
1.2.4 與關聯相關的問題 12
1.2.5 數據導航的問題 13
1.3 ORM和JPA 14
1.4 本章小結 15
第2章 開啓一個項目 17
2.1 Hibernate介紹 17
2.2 使用JPA的“Hello World” 18
2.2.1 配置一個持久化單元 18
2.2.2 編寫一個持久化類 20
2.2.3 存儲和加載消息 21
2.3 原生Hibernate配置 23
2.4 本章小結 26
第3章 域模型和元數據 27
3.1 CaveatEmptor示例應用程序 28
3.1.1 一個分層架構 28
3.1.2 分析業務域 29
3.1.3 CaveatEmptor域模型 30
3.2 實現域模型 31
3.2.1 處理關注點滲漏 31
3.2.2 透明及自動持久化 32
3.2.3 編寫可持久化類 33
3.2.4 實現POJO關聯 36
3.3 域模型元數據 39
3.3.1 基於注解的元數據 40
3.3.2 應用Bean驗證規則 42
3.3.3 使用XML文件外部化元數據 45
3.3.4 在運行時訪問元數據 48
3.4 本章小結 51
第Ⅱ部分 映射策略
第4章 映射持久化類 55
4.1 理解實體和值類型 55
4.1.1 細粒度域模型 55
4.1.2 定義應用程序概念 56
4.1.3 區分實體和值類型 57
4.2 映射具有標識的實體 58
4.2.1 理解Java標識和相等性 58
4.2.2 第一個實體類和映射 59
4.2.3 選擇一個主鍵 60
4.2.4 配置鍵生成器 61
4.2.5 標識符生成器策略 63
4.3 實體映射選項 66
4.3.1 控製名稱 66
4.3.2 動態SQL生成 69
4.3.3 讓實體不可變 69
4.3.4 將一個實體映射到子查詢 70
4.4 本章小結 71
第5章 映射值類型 73
5.1 映射基本屬性 73
5.1.1 重寫基本屬性的默認設置 74
5.1.2 自定義屬性訪問 75
5.1.3 使用派生屬性 77
5.1.4 轉換列值 77
5.1.5 生成的以及默認的屬性值 78
5.1.6 時序屬性 79
5.1.7 映射枚舉 80
5.2 映射可嵌入組件 80
5.2.1 數據庫架構 81
5.2.2 讓類可嵌入 81
5.2.3 重寫嵌入屬性 84
5.2.4 映射嵌套的可嵌入組件 85
5.3 使用轉換器映射Java和SQL類型 87
5.3.1 內置類型 87
5.3.2 創建自定義JPA轉換器 92
5.3.3 使用UserTypes擴展Hibernate 98
5.4 本章小結 104
第6章 映射繼承關係 105
6.1 每個帶有隱式多態的具體類使用一個錶 105
6.2 每個帶有聯閤的具體類使用一個錶 107
6.3 每個類層次結構使用一個錶 109
6.4 每個帶有聯結的子類使用一個錶 112
6.5 混閤繼承策略 115
6.6 可嵌入類的繼承 117
6.7 選擇一種策略 119
6.8 多態關聯 120
6.8.1 多態多對一關聯 121
6.8.2 多態集閤 123
6.9 本章小結 124
第7章 映射集閤和實體關聯 125
7.1 集、包、列錶及值類型映射 125
7.1.1 數據庫架構 126
7.1.2 創建和映射一個集閤屬性 126
7.1.3 選擇集閤接口 127
7.1.4 映射集 128
7.1.5 映射標識符包 129
7.1.6 映射列錶 130
7.1.7 映射一個映射 132
7.1.8 排列和排序集閤 132
7.2 組件集閤 135
7.2.1 組件實例的相等性 136
7.2.2 組件集 138
7.2.3 組件包 139
7.2.4 組件值的映射 141
7.2.5 作為映射鍵的組件 142
7.2.6 可嵌入組件中的集閤 143
7.3 映射實體關聯 144
7.3.1 最簡單的可能關聯 145
7.3.2 讓其變成雙嚮的 146
7.3.3 級聯狀態 147
7.4 本章小結 153
第8章 高級實體關聯映射 155
8.1 一對一關聯 155
8.1.1 共享主鍵 156
8.1.2 外主鍵生成器 158
8.1.3 使用一個外鍵聯結列 161
8.1.4 使用一個聯結錶 162
8.2 一對多關聯 164
8.2.1 考慮一對多包 164
8.2.2 單嚮和雙嚮列錶映射 166
8.2.3 具有聯結錶的可選一對多 168
8.2.4 可嵌入類中的一對多關聯 169
8.3 多對多和三元關聯 171
8.3.1 單嚮和雙嚮多對多關聯 172
8.3.2 具有中間實體的多對多關聯 173
8.3.3 具有組件的三元關聯 177
8.4 具有映射的實體關聯 180
8.4.1 具有屬性鍵的一對多關聯 180
8.4.2 鍵/值三元關係 181
8.5 本章小結 182
第9章 復雜和遺留模式 185
9.1 改進數據庫架構 186
9.1.1 添加輔助數據庫對象 186
9.1.2 SQL約束 189
9.1.3 創建索引 194
9.2 處理遺留鍵 195
9.2.1 映射一個自然主鍵 195
9.2.2 映射一個組閤主鍵 196
9.2.3 組閤主鍵中的外鍵 198
9.2.4 引用組閤主鍵的外鍵 201
9.2.5 引用非主鍵的外鍵 202
9.3 將屬性映射到輔助錶 203
9.4 本章小結 204
第Ⅲ部分 事務性數據處理
第10章 管理數據 207
10.1 持久化生命周期 207
10.1.1 實體實例狀態 208
10.1.2 持久化上下文 209
10.2 EntityManager接口 211
10.2.1 規範的工作單元 211
10.2.2 使數據持久化 212
10.2.3 檢索和修改持久化數據 213
10.2.4 得到一個引用 215
10.2.5 讓數據變成瞬時的 216
10.2.6 刷新數據 217
10.2.7 復製數據 217
10.2.8 在持久化上下文中緩存 218
10.2.9 刷新持久化上下文 220
10.3 處理分離的狀態 221
10.3.1 分離實例的標識 221
10.3.2 實現相等性方法 223
10.3.3 分離實體實例 225
10.3.4 閤並實體實例 226
10.4 本章小結 227
第11章 事務和並發 229
11.1 事務的要素 229
11.1.1 ACID屬性 230
11.1.2 數據庫和係統事務 230
11.1.3 使用JTA的編程式事務 230
11.1.4 處理異常 232
11.1.5 聲明式事務分界 234
11.2 控製並發訪問 234
11.2.1 理解數據庫級彆的並發 235
11.2.2 樂觀並發控製 239
11.2.3 顯式悲觀鎖 245
11.2.4 避免死鎖 248
11.3 非事務性數據訪問 249
11.3.1 在自動提交模式中讀取數據 250
11.3.2 對修改進行排隊 251
11.4 本章小結 253
第12章 抓取計劃、策略和配置文件 255
12.1 延遲加載和急加載 256
12.1.1 理解實體代理 256
12.1.2 延遲持久化集閤 260
12.1.3 使用攔截進行延遲加載 262
12.1.4 關聯和集閤的急加載 264
12.2 選擇一個抓取策略 266
12.2.1 n+1查詢問題 266
12.2.2 笛卡爾積問題 267
12.2.3 批量預抓取數據 270
12.2.4 使用子查詢預抓取集閤 272
12.2.5 使用多個SELECT進行急抓取 273
12.2.6 動態急抓取 274
12.3 使用抓取配置文件 275
12.3.1 聲明Hibernate抓取配置文件 276
12.3.2 使用實體圖 277
12.4 本章小結 281
第13章 數據過濾 283
13.1 級聯狀態遷移 284
13.1.1 可用的級聯選項 284
13.1.2 傳遞式分離與閤並 285
13.1.3 級聯刷新 287
13.1.4 級聯復製 289
13.1.5 啓用全局傳遞式持久化 290
13.2 偵聽和攔截事件 290
13.2.1 JPA事件偵聽器和迴調 291
13.2.2 實現Hibernate攔截器 294
13.2.3 核心事件係統 298
13.3 使用Hibernate Envers進行
審計和版本控製 299
13.3.1 啓用審計日誌 300
13.3.2 創建審計追蹤 301
13.3.3 找齣版本 301
13.3.4 訪問曆史數據 303
13.4 動態數據過濾器 305
13.4.1 定義動態過濾器 306
13.4.2 應用過濾器 306
13.4.3 啓用過濾器 307
13.4.4 過濾集閤訪問 308
13.5 本章小結 309
第IV部分 編寫查詢
第14章 創建和執行查詢 313
14.1 創建查詢 314
14.1.1 JPA查詢接口 314
14.1.2 類型化查詢結果 316
14.1.3 Hibernate的查詢接口 316
14.2 準備查詢 318
14.2.1 防止SQL注入攻擊 318
14.2.2 綁定命名參數 318
14.2.3 使用定位參數 320
14.2.4 對大結果集分頁 320
14.3 執行查詢 322
14.3.1 列示所有結果 322
14.3.2 得到單個結果 322
14.3.3 滾動數據庫遊標 323
14.3.4 遍曆一個結果 325
14.4 命名和外部化查詢 326
14.4.1 調用一個命名查詢 326
14.4.2 在XML元數據中定義查詢 326
14.4.3 使用注解定義查詢 327
14.4.4 編程式定義命名查詢 328
14.5 查詢提示 329
14.5.1 設置一個超時時長 330
14.5.2 設置刷新模式 330
14.5.3 設置隻讀模式 331
14.5.4 設置一個抓取大小 331
14.5.5 設置一個SQL注釋 331
14.5.6 命名的查詢提示 332
14.6 本章小結 333
第15章 查詢語言 335
15.1 選擇 336
15.1.1 指定彆名和查詢根 336
15.1.2 多態查詢 337
15.2 限製 338
15.2.1 比較錶達式 339
15.2.2 使用集閤的錶達式 344
精彩書摘
1.1 持久化的定義
幾乎所有的應用程序都需要持久化數據。持久化是應用程序開發中的基本概念之一。如果一個信息係統在關機時不保存數據,則該係統就沒什麼實際用途。對象持久化意味著個體對象可以比應用程序進程存在得更久;它們可以保存到數據存儲並在以後的某個時點重建。當我們談論Java 中的持久化時,通常談論的是使用SQL 在一個數據庫中映射和存
儲對象實例。首先我們簡要介紹一下該技術以及如何在Java 中使用它。瞭解這一信息基礎,隨後我們就可以繼續探討持久化以及如何在麵嚮對象應用程序中實現它。
1.1.1 關係型數據庫
就像大多數其他軟件工程師一樣,你可能已經使用過SQL 和關係型數據庫;許多軟件工程師每天都在處理這樣的係統。關係型數據庫管理係統具有基於SQL 的應用編程接口;因此,我們將如今的關係型數據庫産品稱為SQL 數據庫管理係統(DBMS),或者我們在談論特定係統時將其稱為SQL 數據庫。關係技術是人們所熟知的技術,而這也成為許多組織選擇它的充足理由。但要說它是唯一的理由,恐怕就不太尊重事實瞭。關係型數據庫的應用已經根深蒂固瞭,因為它們對於數據管理來說是一種極具靈活性並且強健的方式。歸因於對關係數據模型的深入研究的理論基礎,關係型數據庫可以保障和保護所存儲數據的完整性,這是其眾多可取特性之一。你可能對E.F. Codd 於四十多年前提齣的關係模型很熟悉,即A Relational Model of Data forLarge Shared Data Banks(Codd,1970 年)。有一篇最近的摘要值得一讀,其中專注於SQL,這就是C. J. Date 的SQL and Relational Theory(Date,2009 年)。關係型DBMS 並非特定於Java,也不是特定於某特殊應用程序的一個SQL 數據庫。
這一重要原則稱為數據獨立性。換句話說,我們怎麼強調如下重要事實都不過分:數據的生命周期比任何應用程序都要長久。關係技術提供瞭在不同應用程序或者同一整體係統的不同部分(比如數據錄入應用程序和報告應用程序)之間共享數據的方法。關係技術是許多異構係統和技術平颱的通用標準。因此,關係數據模型通常是業務實體的常用企業級錶示方式的基礎。
在我們更詳細地探究SQL 數據庫的實踐方麵之前,必須提及一個重要問題:即便作為關係型推嚮市場,但一個僅僅提供SQL 數據語言接口的數據庫係統並非真正的關係型數據庫,並且在許多方麵來說甚至與其原始概念都不相符。這自然而然會導緻混淆。SQL 從業
……
前言/序言
本書既是關於Hibernate和Java持久化的一本指南,也是一本參考資料。如果你纔開始接觸Hibernate,我們建議你從本書第1章開始閱讀,並且使用第2章的“Hello World”教程開始編碼。如果你已經使用過較早的Hibernate版本,那麼應該快速閱讀前兩章以便得到一個概覽,然後跳到第3章的中間部分。
路綫圖
本書分為五個主要部分。
在第Ⅰ部分“ORM入門”中,我們將探討對象/關係映射背後的基礎。我們將演練親身實踐的指南,以便讓你開始處理自己的首個Hibernate項目。我們將介紹用於域模型的Java應用程序設計,以及用於創建對象/關係映射元數據的選項。
第Ⅱ部分“映射策略”專注於Java類及其屬性,以及它們如何映射到SQL錶和列。我們將探究Hibernate和Java持久化中的所有基本和高級映射選項。我們將介紹如何處理繼承、集閤以及復雜類關聯。最後,我們要探討遺留數據庫模式的集成以及特彆難處理的一些映射策略。
第Ⅲ部分“事務性數據處理”完全與使用Hibernate和Java持久化加載與存儲數據有關。我們將介紹編程接口、如何編寫事務性應用程序,以及Hibernate如何纔能最有效地從數據庫加載數據。
第Ⅳ部分“編寫查詢”將介紹數據查詢功能,並詳盡講解查詢語言和API。在這一部分中,並非所有章節都是以指南的風格來編寫的;我們期望你在構建一個應用程序以及為特定查詢問題查找解決方案時經常瀏覽本書的這一部分。
第Ⅴ部分“構建應用程序”將探討分層和有會話意識的Java數據庫應用程序的設計與實
Hibernate實戰(第2版) [Java Persistence with Hibernate, Second Edition] 下載 mobi epub pdf txt 電子書 格式
Hibernate實戰(第2版) [Java Persistence with Hibernate, Second Edition] 下載 mobi pdf epub txt 電子書 格式 2024
Hibernate實戰(第2版) [Java Persistence with Hibernate, Second Edition] mobi epub pdf txt 電子書 格式下載 2024