第1章 Hibernate起源 1
1.1 ORM框架 1
1.2 ORM核心理念 2
1.3 持久層概念 3
1.4 Hibernate 3
1.4.1 Hibernate Core 4
1.4.2 Hibernate Annotations 4
1.4.3 Hibernate EntityManager 4
1.4.4 Hibernate Search 4
1.4.5 Hibernate Shards 4
1.4.6 Hibernate Validator 5
1.4.7 Hibernate Tools 5
1.4.8 NHibernate 5
1.4.9 JBoss Seam 5
1.5 下載Hibernate 5
1.6 使用Hibernate的第1個例子 6
1.6.1 建立guestbook錶 6
1.6.2 新建chapter01_first項目 7
1.6.3 項目文件列錶 8
1.6.4 編寫hibernate.cfg.xml 9
1.6.5 編寫Guestbook.java 10
1.6.6 編寫Guestbook.hbm.xml 11
1.6.7 HibernateTest.java 13
1.6.8 運行HibernateTest程序 14
1.6.9 chapter01_first項目的運行過程 14
第2章 Hibernate的核心接口與類 16
2.1 Configuration類 16
2.1.1 Hibernate配置文件 17
2.1.2 在應用程序中設置新的屬性值 18
2.1.3 Hibernate的核心配置信息 18
2.1.4 數據庫方言類 19
2.2 SessionFactory接口 20
2.3 Session接口 20
2.3.1 save()方法 21
2.3.2 get()方法 21
2.3.3 load()方法 22
2.3.4 update()方法 22
2.3.5 delete()方法 23
2.4 Transaction接口 24
2.5 Query接口 24
2.6 Criteria接口 25
2.7 使用MyEclipse可視化開發
Hibernate實例 25
2.7.1 設置MyEclipse連接Oracle數據庫 26
2.7.2 新建項目並增加Hibernate開發支持 28
2.7.3 自動生成Guestbook類與映射文件 31
2.7.4 編寫HibernateSessionFactoryUtil.java文件 35
2.7.5 編寫HibernateTest.java 36
2.7.6 程序運行結果 37
2.7.7 使用HQL編輯器調試HQL語句 38
2.8 Hibernate應用的開發方式 40
2.8.1 自底嚮上,從數據庫錶到持久化類 40
2.8.2 自上嚮下,持久化類到數據庫錶 40
2.8.3 從中間齣發,嚮上與嚮下發展 40
2.9 設置Hibernate使用連接池 40
2.9.1 設置使用Tomcat中的連接池 40
2.9.2 使用C3P0連接池 41
2.9.3 使用自定義連接池 41
2.10 使用C3P0連接池 41
2.10.1 創建chapter02_c3p0項目 41
2.10.2 編輯hibernate.cfg.xml文件 42
2.10.3 chapter02_c3p0項目的運行與輸齣 43
2.11 網絡留言本V2.0 43
2.11.1 建錶 43
2.11.2 創建guestbookv2.0項目 43
2.11.3 編寫StringUtil.java文件 44
2.11.4 為項目添加Hibernate開發支持 45
2.11.5 修改hibernate.cfg.xml的內容 45
2.11.6 生成Guestbook.java與Guestbook.hbm.xml文件 45
2.11.7 編寫Guestbook在於Dao.java文件 46
2.11.8 編寫GuestbookDaoHibernate.java文件 46
2.11.9 編寫HibernateFactorySessionUtil.java 47
2.11.10 編寫AddMessageServlet.java文件 47
2.11.11 編寫GetMessagesServlet.java文件 49
2.11.12 編寫CharacterEncodingFilter.java 49
2.11.13 修改web.xml文件 50
2.11.14 編寫header.jsp文件 51
2.11.15 編寫footer.htm文件 51
2.11.16 使用JSValidation 52
2.11.17 使用FCKeditor 54
2.11.18 編寫addMessage.jsp文件 56
2.11.19 編寫getMessages.jsp文件 58
2.11.20 編寫addResult.jsp文件 59
2.11.21 編寫error404.htm文件 59
2.11.22 編寫error500.jsp文件 60
2.11.23 程序運行輸齣 60
第3章 標識符屬性生成策略與對象識彆 63
3.1 數據庫中的主鍵 63
3.1.1 自然主鍵 63
3.1.2 代理主鍵 64
3.2 標識符屬性 64
3.3 標識符屬性的生成策略 64
3.3.1 increment生成策略 64
3.3.2 identity生成策略 65
3.3.3 sequence生成策略 65
3.3.4 hilo生成策略未 65
3.3.5 seqhilo生成策略 66
3.3.6 uuid生成策略 66
3.3.7 guid生成策略 66
3.3.8 native生成策略 67
3.3.9 assigned生成策略 67
3.3.10 foreign生成策略 67
3.3.11 選擇標識符屬性生成策略 67
3.4 映射復閤主鍵 68
3.4.1 數據準備 68
3.4.2 使用屬性映射復閤主鍵 68
3.4.3 使用主鍵類映射復閤主鍵 71
3.5 對象識彆 74
3.5.1 Java中的對象識彆 74
3.5.2 識彆數據庫中數據 75
3.5.3 識彆Hibernate中的持久化對象 75
3.6 Commons lang buider 78
3.6.1 安裝Commonclipse 78
3.6.2 使用Commonclipse 79
第4章 持久化對象生命周期 80
4.1 持久化對象生命周期的狀態 80
4.1.1 Transient狀態 80
4.1.2 Persistent狀態 81
4.1.3 Detached狀態 81
4.1.4 Removed狀態 82
4.1.5 Session對象的“髒”數據檢查 83
4.2 Session接口的核心方法 83
4.2.1 saveOrUpdate()方法 83
4.2.2 merge()方法 84
4.2.3 flush()方法 85
4.2.4 close()方法 85
4.3 不可更改的持久化對象 86
第5章 OSIV與泛型DAO模式 87
5.1 OSIV模式 87
5.1.1 使用Servlet過濾器實現OSIV模式 88
5.1.2 配置web.xml文件 89
5.2 泛型DAO的設計與實現 89
5.2.1 編寫泛型DAO接口 90
5.2.2 編寫泛型DAO的實現類 90
5.2.3 使用GenericDao接口 91
5.2.4 使用GenericDaoHibernate類 92
5.3 網絡留言本V2.1 92
5.3.1 新建guestbookv2.1項目 92
5.3.2 建立admin錶 93
5.3.3 文件列錶 93
5.3.4 生成Admin.java與Admin.hbm.xml文件 94
5.3.5 增加hibernate.cfg.xml文件 95
5.3.6 編寫AdminDao.java文件 95
5.3.7 編寫AdminDaoHibernate.java文件 95
5.3.8 修改GetMessagesServlet.java文件 96
5.3.9 編寫AdminUserServlet.java文件 96
5.3.10 編寫AuthenticationFilter.java文件 98
5.3.11 編寫ManageServlet.java文件 99
5.3.12 編寫login.jsp文件 100
5.3.13 修改validation-framework.js文件 101
5.3.14 修改validation-config.xml文件 101
5.3.15 編寫loginFail.jsp文件 102
5.3.16 編寫list.jsp文件 102
5.3.17 編寫edit.jsp文件 103
5.3.18 編寫editResult.jsp文件 104
5.3.19 編寫deleteResult.jsp文件 105
5.3.20 修改web.xml文件 105
5.3.21 程序運行結果 107
第6章 Hibernate的集閤映射 108
6.1 Set集閤映射 108
6.1.1 Set接口 108
6.1.2 Set映射 110
6.2 List映射 115
6.2.1 List接口 115
6.2.2 List映射 116
6.3 Bag映射 118
6.4 IdBag映射 121
6.5 Map映射 123
6.5.1 Map接口 123
6.5.2 HashMap 123
6.5.3 LinkedHashMap 124
6.5.4 TreeMap 124
6.5.5 Map映射 125
6.6 排序集閤映射 128
6.6.1 利用[set]或[map]標簽的sort屬性排序 128
6.6.2 利用SQL的order by子句排序 130
第7章 組件映射 132
7.1 組件(Component)映射的單嚮關聯 132
7.1.1 數據準備 132
7.1.2 編寫Profile.java文件 133
7.1.3 編寫User.java文件 133
7.1.4 編寫User.hbm.xml文件 134
7.1.5 編寫HibernateTest.java文件 135
7.1.6 程序運行輸齣 136
7.2 組件映射的雙嚮關聯 137
7.3 組件集閤映射 138
7.3.1 數據準備 138
7.3.2 編寫Image.java文件 139
7.3.3 編寫Product.java文件 140
7.3.4 編寫Product.hbm.xml文件 141
7.3.5 編寫HibernateTest.java文件 142
7.3.6 組件集閤映射的雙嚮關聯 144
第8章 映射多對一及一對多關聯關係 145
8.1 多對一單嚮關聯 145
8.1.1 數據準備 145
8.1.2 編寫Category.java與Category.hbm.xml 文件 146
8.1.3 編寫Product.java與Product.hbm.xml文件 147
8.1.4 編寫HibernateTest.java文件 148
8.1.5 outer-join屬性 151
8.2 一對多單嚮關聯 151
8.2.1 數據準備 151
8.2.2 編寫Product.java與Product.hbm.xml文件 152
8.2.3 編寫Category.java與Category.hbm.xml文件 152
8.2.4 編寫HibernateTest.java文件 154
8.3 級聯 156
8.4 一對多雙嚮關聯 157
8.4.1 數據準備 158
8.4.2 編寫Product.java與Product.hbm.xml文件 158
8.4.3 編寫Category.java與Category.hbm.xml文件 158
8.4.4 編寫HibernateTest.java文件 159
8.5 控製反轉(Inverse) 160
第9章 映射一對一關聯關係 163
9.1 共享主鍵關聯 163
9.1.1 數據準備 163
9.1.2 編寫User.java與User.hbm.xml文件 164
9.1.3 編寫Profile.java與Profile.hbm.xml文件 165
9.1.4 編寫HibernateTest.java文件 166
9.2 唯一外鍵關聯 168
9.2.1 準備數據 168
9.2.2 編寫Profile.java與Profile.hbm.xml 文件 169
9.2.3 編寫User.java與User.hbm.xml文件 169
9.2.4 編寫HibernateTest.java 文件 170
第10章 映射多對多關聯關係 171
10.1 多對多單嚮關聯 171
10.1.1 準備數據 171
10.1.2 編寫Product.java與Product.hbm.xml文件 173
10.1.3 編寫Order.java與Order.hbm.xml文件 173
10.1.4 Order與Product的類圖 175
10.1.5 編寫HibernateTest.java文件 175
10.2 多對多雙嚮關聯 177
10.2.1 準備數據 178
10.2.2 編寫Order.java與Order.hbm.xml 文件 178
10.2.3 編寫Product.java與Product.hbm.xml文件 179
10.2.4 Order與Product類的類圖 179
10.2.5 編寫HibernateTest.java文件 180
10.3 在多對多關聯中使用組件集閤映射 181
10.3.1 準備數據 182
10.3.2 編寫Product.java與Product.hbm.xml 文件 182
10.3.3 編寫OrderItem.java文件 182
10.3.4 編寫Order.java與Order.hbm.xml文件 183
10.3.5 Product、Order與OrderItem的類圖 185
10.3.6 編寫HibernateTest.java文件 185
10.4 分拆多對多關聯為兩個一對多關聯 187
10.4.1 數據準備 187
10.4.2 編寫Product.java與Product.hbm.xml文件 187
10.4.3 編寫OrderItem.java與OrderItem.hbm.xml文件 187
10.4.4 編寫Order.java與Order.hbm.xml文件 188
10.4.5 編寫HibernateTest.java文件 189
第11章 Criteria查詢 190
11.1 準備數據 190
11.1.1 創建guestbook、product和category錶 190
11.1.2 在guestbook、product和category錶中添加演示數據 191
11.1.3 實例文件 191
11.2 Criteria的基本使用 192
11.2.1 Criteria接口的主要方法 192
11.2.2 Criterion接口 193
11.2.3 排序查詢結果 194
11.2.4 分頁顯示數據 194
11.2.5 查詢一條記錄 195
11.2.6 通過關聯對象建立查詢條件 196
11.2.7 Restrictions類 196
11.2.8 條件“或”方式組閤查詢條件 197
11.2.9 使用原生SQL語句設置查詢條件.. 198
11.2.10 統計函數查詢 198
11.2.11 統計函數組閤查詢條件 199
11.2.12 獲取多個統計函數的值 199
11.2.13 分組查詢 200
11.2.14 分組統計 200
11.2.15 為分組統計結果指定彆名 201
11.2.16 投影查詢 202
11.2.17 使用Property類的forName()方法實現分組統計 203
11.3 使用DetachedCriteria對象實現離綫查詢 204
11.4 根據示例對象查詢 205
第12章 HQL與Native SQL查詢 206
12.1 準備數據 206
12.2 Query接口 206
12.2.1 list()方法 207
12.2.2 iterate()方法 207
12.2.3 選擇list()和iterate()方法 208
12.2.4 使用setMaxResults()和setFirstResult()方法實現分頁 208
12.2.5 使用uniqueResult()方法讀取唯一記錄 209
12.3 HQL基礎 209
12.3.1 查詢所有持久化對象 209
12.3.2 投影查詢 210
12.3.3 使用彆名 212
12.3.4 使用distinct關鍵字 213
12.3.5 限定查詢的條件 213
12.3.6 數據排序 216
12.3.7 使用參數占位符 216
12.3.8 使用統計函數 217
12.3.9 使用函數 218
12.4 HQL的批量更新 218
12.5 HQL中的連接查詢 219
12.5.1 使用交叉連接 219
12.5.2 使用內連接 220
12.5.3 使用左外連接 221
12.5.4 使用右外連接 222
12.5.5 迫切內連接 223
12.5.6 迫切左外連接 225
12.6 命名的HQL 225
12.7 使用SQL 226
12.7.1 SQL查詢 226
12.7.2 SQL更新記錄 228
12.7.3 SQL刪除記錄 228
12.7.4 命名的SQL 229
12.7.5 調用存儲過程 229
12.8 使用SQLQuery對象實現動態錶映射 230
12.8.1 準備數據 230
12.8.2 編寫LogInfo.java文件 231
12.8.3 編寫LogInfo.hbm.xml文件 231
12.8.4 編寫HibernateTest.java文件 232
12.9 在Hibernate中調用數據庫存儲過程 233
12.9.1 準備數據 233
12.9.2 調用數據庫存儲過程 234
12.10 在Hibernate中使用JDBC 234
12.10.1 準備數據 235
12.10.2 調用數據庫存儲過程 235
第13章 Hibernate的事務管理 236
13.1 數據庫事務 236
13.1.1 事務的特性 237
13.1.2 編程式與聲明式事務 237
13.1.3 在JDBC中使用事務 237
13.1.4 並發訪問數據可能引發的問題 239
13.1.5 事務隔離級彆 241
13.2 Hibernate中的事務 243
13.2.1 在Hibernate中事務管理API 243
13.3 鎖 244
13.4 Hibernate中的鎖定模式 245
13.5 悲觀鎖 245
13.5.1 使用Query對象的setLockMode()方法設置悲觀鎖 245
13.5.2 使用Sessoin對象的lock()方法設置悲觀鎖 246
13.6 樂觀鎖 246
13.6.1 以版本號方式實現樂觀鎖 247
13.6.2 時間戳實現樂觀鎖 250
第14章 繼承映射 252
14.1 繼承關係層次一個錶 253
14.1.1 創建delivery錶 253
14.1.2 編寫Delivery.java文件 254
14.1.3 編寫PostDelivery.java文件 254
14.1.4 編寫ExpressDelivery.java文件 254
14.1.5 編寫Delivery.hbm.xml文件 254
14.1.6 編寫HibernateTest.java文件 255
14.1.7 繼承關係層次一個錶的優缺點 257
14.2 每個具體類一個錶 257
14.2.1 創建post_delivery和express_delivery錶 258
14.2.2 編寫Delivery.java文件 258
14.2.3 編寫PostDelivery.java文件 259
14.2.4 編寫ExpressDelivery.java文件 259
14.2.5 編寫Delivery.hbm.xml文件 259
14.2.6 編寫HibernateTest.java文件 260
14.2.7 每個具體類一個錶的優缺點 261
14.3 每個子類一個錶 261
14.3.1 創建delivery、post_delivery和express_delivery錶 262
14.3.2 編寫Delivery.java文件 262
14.3.3 編寫PostDelivery.java文件 263
14.3.4 編寫ExpressDelivery.java 263
14.3.5 編寫Delivery.hbm.xml文件 263
14.3.6 編寫HibernateTest.java文件 263
14.4 每個子類一個錶的優缺點 265
14.5 小結 265
第15章 Hibernate過濾器 266
15.1 概念 266
15.2 配置 266
15.2.1 使用[filter-def]標簽定義過濾器 266
15.2.2 使用[filter]標簽聲明使用過濾器 267
15.3 調用Hibernate過濾器 267
15.3.1 Session接口中與Filter對象有關的方法 267
15.3.2 調用Hibernate過濾器的示例 268
15.4 小結 269
第16章 數據攔截與事件監聽 270
16.1 攔截器 270
16.1.1 Interceptor接口的方法 270
16.1.2 使用攔截器實現審計日誌 271
16.2 Hibernate的事件監聽 274
16.2.1 應用Hibernate事件監聽器 275
16.2.2 使用監聽器實現審計日誌 275
16.2.3 事件監聽與攔截器的比較 280
第17章 Hibernate的緩存 281
17.1 持久層緩存的概念 281
17.1.1 持久層緩存的級彆 281
17.2 Hibernate的一級緩存 282
17.2.1 一級緩存的實現原理 283
17.2.2 管理一級緩存 283
17.3 Hibernate的二級緩存 284
17.3.1 二級緩存的策略 285
17.3.2 應用EHCache作為二級緩存 286
17.3.3 緩存集閤對象 288
17.3.4 管理二級緩存 289
17.4 查詢緩存 290
17.4.1 查詢緩存的實現原理 290
17.4.2 使用查詢緩存 291
17.5 應用memcached作為二級緩存 292
17.5.1 memcached 292
17.5.2 Hibernate-memcached 292
17.5.3 在Hibernate應用中使用memcached 293
17.6 緩存對get()、load()、list()和iterator()方法的影響 295
17.7 小結 296
第18章 Hibernate的性能優化 297
18.1 使用dynamic-insert與dynamic-update 297
18.1.1 應用[class]標簽的dynamic-insert與dynamic-update屬性 298
18.2 延遲加載 298
18.2.1 持久化對象的延遲加載 299
18.2.2 集閤對象的延遲加載 301
18.2.3 屬性的延遲加載 303
18.2.4 解決org.hibernate.Lazy
InitializationException違例問題 303
18.3 集閤對象的抓取策略 304
18.3.1 查詢抓取 305
18.3.2 子查詢抓取 307
18.3.3 連接查詢抓取 308
18.3.4 批量抓取 309
18.3.5 Hibernate的“1+N”問題 310
第19章 Hibernate Annotations組件 312
19.1 下載Hibernate Annotations組件 312
19.2 使用Annotations實現一對多雙嚮關聯映射 313
19.2.1 準備數據 313
19.2.2 在當前項目中添加Hibernate Annotations類庫 313
19.2.3 編寫Product.java和Category.java文件 313
19.2.4 編寫hibernate.cfg.xml文件 317
19.2.5 編寫HibernateTest.java文件 317
19.3 Hibernate Annotations組件核心注解 318
19.3.1 注解屬性或者方法 318
19.3.2 Hibernate Annotations組件核心注解 318
19.3.3 注解VS映射文件 319
19.4 Hibernate EntityManager 320
19.4.1 Java Persistence API 320
19.4.2 下載Hibernate EntityManager 320
19.4.3 應用Hibernate EntityManager 320
第20章 Hibernate Search組件 323
20.1 搜索引擎 323
20.1.1 全文檢索引擎 323
20.1.2 目錄索引搜索引擎 324
20.1.3 元搜索引擎 324
20.2 Lucene 324
20.3 Hibernate Search組件 325
20.3.1 Hibernate Search組件的特點 325
20.3.2 使用Hibernate Search組件 325
20.4 使用Luke工具查看索引數據 330
20.5 中文分詞 331
20.5.1 概念 331
20.5.2 中文分詞的基本機製 331
20.5.3 Hibernate Search使用第三方中文分詞組件 332
第21章 Hibernate與Struts 2 334
21.1 Struts 2框架 334
21.1.1 Struts 2框架的特點 335
21.1.2 下載Struts 2 335
21.2 編寫第1個Struts 2程序 336
21.2.1 新建Web項目添加Struts類庫 336
21.2.2 修改web.xml文件配置Struts2的過濾器 337
21.2.3 編寫login.jsp文件 337
21.2.4 編寫LoginAction.java文件 338
21.2.5 編寫loginResult.jsp文件 340
21.2.6 編寫struts.xml文件 340
21.2.7 項目部署後的運行效果 341
21.3 Struts 2的內部結構 342
21.3.1 Struts 2的處理流程 343
21.4 網絡留言本V2.2 344
21.4.1 新建guestbookv2.2項目 344
21.4.2 所需文件列錶 344
21.4.3 編寫GuestbookAction.java文件 345
21.4.4 編寫AdminAction.java文件 347
21.4.5 編寫struts.xml文件 348
21.4.6 修改web.xml文件 349
21.4.7 修改addMessage.jsp文件 350
21.4.8 修改login.jsp文件 351
21.4.9 部署運行項目 352
第22章 Hibernate與Spring Framework 353
22.1 Spring簡介 353
22.1.1 Spring的子模塊 353
22.1.2 下載Spring 354
22.2 IoC容器 355
22.2.1 容器的概念 355
22.2.2 IoC設計模式 355
22.2.3 Spring的IoC容器 356
22.2.4 使用Spring IoC容器示例 356
22.3 Spring AOP 359
22.3.1 OOP的不足 359
22.3.2 AOP技術 360
22.3.3 Spring AOP 360
22.3.4 AOP的專有名詞 361
22.3.5 Spring AOP中的常用通知類型 361
22.3.6 使用AspectJ 5的注解實現Spring AOP 362
22.3.7 AspectJ的切入點錶達式語法 364
22.4 Spring對Hibernate的支持 365
22.4.1 簡化獲取SessionFactory對象 365
22.4.2 HibernateTemplate類 368
22.4.3 HibernateDaoSupport類 371
22.4.4 Spring對事務的支持 372
22.4.5 聲明式事務的參數定義 373
22.4.6 使用Spring注解管理事務的示例 375
22.5 Guestbook v2.3版 377
22.5.1 新建Guestbookv2.3項目 377
22.5.2 文件列錶 378
22.5.3 修改web.xml文件 378
22.5.4 修改DAO實現類 379
22.5.5 修改Servlet文件 380
22.5.6 編寫ApplicationContext.xml 380
22.5.7 項目運行輸齣 381
22.6 小結 382
第23章 KH網絡博客係統 383
23.1 係統需求分析 383
23.1.1 確定用戶 383
23.1.2 係統功能 384
23.2 係統設計 384
23.2.1 係統結構設計 384
23.2.2 數據庫設計 385
23.2.3 設計域模型 390
23.2.4 持久層設計 391
23.2.5 業務邏輯層設計 392
23.2.6 錶現層的設計 392
23.2.7 Action類設計 393
23.2.8 權限控製設計 394
23.2.9 分頁設計 394
23.2.10 數據校驗設計 397
23.2.11 訂閱博客功能設計 399
23.2.12 設置開發環境 399
23.2.13 Java包名與組織結構設計 400
23.3 編碼實現 400
23.3.1 創建項目 400
23.3.2 域模型代碼 400
23.3.3 持久層的相關代碼 403
23.3.4 業務邏輯層的相關代碼 412
23.3.5 錶現層的相關代碼 421
23.4 部署運行KH網絡博客係統 440
23.5 小結 441
· · · · · · (
收起)