第1篇 背景介紹
         第1章 源碼閱讀 2
         1.1 源碼閱讀的意義 2
         1.2 源碼閱讀的方法 2
         1.3 開源軟件 3
         1.4 MyBatis源碼 4
         1.5 本書結構 5
         1.5.1 背景知識 5
         1.5.2 文件的指代 5
         1.5.3 方法的指代 8
         第2章 MyBatis概述 10
         2.1 背景介紹 10
         2.1.1 傳統數據庫連接 10
         2.1.2 ORM框架 11
         2.1.3 MyBatis的特點 12
         2.2 快速上手 12
         2.2.1 MyBatis包的引入 14
         2.2.2 MyBatis的簡單配置 15
         2.2.3 基於MyBatis的數據庫操作 16
         2.3 MyBatis的核心功能分析 17
         第3章 MyBatis運行初探 20
         3.1 初始化階段追蹤 23
         3.1.1 靜態代碼塊的執行 23
         3.1.2 獲取InputStream 24
         3.1.3 配置信息讀取 25
         3.1.4 總結 27
         3.2 數據讀寫階段追蹤 27
         3.2.1 獲得SqlSession 27
         3.2.2 映射接口文件與映射文件的綁定 28
         3.2.3 映射接口的代理 28
         3.2.4 SQL語句的查找 31
         3.2.5 查詢結果緩存 31
         3.2.6 數據庫查詢 33
         3.2.7 處理結果集 36
         3.2.8 總結 39
         第4章 MyBatis源碼結構概述 40
         4.1 包結構 40
         4.2 分組結構 40
         第2篇 基礎功能包源碼閱讀
         第5章 exceptions包 44
         5.1 背景知識 44
         5.1.1 Java的異常 44
         5.1.2 序列化與反序列化 45
         5.2 Exception類 46
         5.3 ExceptionFactory類 47
         第6章 reflection包 48
         6.1 背景知識 48
         6.1.1 裝飾器模式 48
         6.1.2 反射 50
         6.1.3 Type接口及其子類 54
         6.2 對象工廠子包 55
         6.3 執行器子包 57
         6.4 屬性子包 59
         6.5 對象包裝器子包 61
         6.6 反射核心類 62
         6.7 反射包裝類 65
         6.8 異常拆包工具 65
         6.9 參數名解析器 68
         6.10 泛型解析器 69
         第7章 annotations包與lang包 76
         7.1 Java注解詳解 76
         7.2 Param注解分析 78
         第8章 type包 81
         8.1 模闆模式 82
         8.2 類型處理器 83
         8.2.1 類型處理器的基類與實現類 83
         8.2.2 TypeReference類 85
         8.3 類型注冊錶 86
         第9章 io包 89
         9.1 背景知識 89
         9.1.1 單例模式 89
         9.1.2 代理模式 89
         9.1.3 靜態代理 90
         9.1.4 VFS 92
         9.2 VFS實現類 92
         9.2.1 DefaultVFS類 94
         9.2.2 JBoss6VFS類 94
         9.3 類文件的加載 96
         9.4 ResolverUtil類 97
         第10章 logging包 100
         10.1 背景知識 100
         10.1.1 適配器模式 100
         10.1.2 日誌框架與日誌級彆 102
         10.1.3 基於反射的動態代理 103
         10.2 Log接口 105
         10.3 Log接口的實現類 107
         10.4 LogFactory 108
         10.5 JDBC日誌打印 109
         第11章 parsing包 113
         11.1 背景知識 113
         11.1.1 XML文件 113
         11.1.2 XPath 115
         11.2 XML解析 116
         11.3 文檔解析中的變量替換 118
         第3篇 配置解析包源碼閱讀
         第12章 配置解析概述 124
         第13章 binding包 128
         13.1 數據庫操作的接入 128
         13.1.1 數據庫操作的方法化 129
         13.1.2 數據庫操作方法的接入 133
         13.2 抽象方法與數據庫操作節點的關聯 134
         13.3 數據庫操作接入總結 136
         13.3.1 初始化階段 136
         13.3.2 數據讀寫階段 137
         13.4 MyBatis與Spring、Spring Boot的整閤 137
         第14章 builder包 139
         14.1 建造者模式 139
         14.2 建造者基類與工具類 142
         14.3 SqlSourceBuilder類與StaticSqlSource類 143
         14.4 CacheRefResolver類和ResultMapResolver類 145
         14.4.1 CacheRefResolver類 145
         14.4.2 ResultMapResolver類 146
         14.5 ParameterExpression類 148
         14.6 XML文件解析 149
         14.6.1 XML文件的聲明解析 150
         14.6.2 配置文件解析 151
         14.6.3 數據庫操作語句解析 153
         14.6.4 Statement解析 155
         14.6.5 引用解析 157
         14.7 注解映射的解析 159
         14.7.1 注解映射的使用 159
         14.7.2 注解映射解析的觸發 160
         14.7.3 直接注解映射的解析 164
         14.7.4 間接注解映射的解析 164
         第15章 mapping包 169
         15.1 SQL語句處理功能 169
         15.1.1 MappedStatement類 169
         15.1.2 SqlSource類 170
         15.1.3 BoundSql 171
         15.2 輸齣結果處理功能 171
         15.2.1 ResultMap類 172
         15.2.2 ResultMapping類 173
         15.2.3 Discriminator 174
         15.3 輸入參數處理功能 176
         15.4 多數據庫種類處理功能 176
         15.5 其他功能 178
         第16章 scripting包 179
         16.1 OGNL 179
         16.2 語言驅動接口及語言驅動注冊錶 183
         16.3 SQL節點樹的組建 186
         16.4 SQL節點樹的解析 189
         16.4.1 OGNL輔助類 189
         16.4.2 錶達式求值器 193
         16.4.3 動態上下文 194
         16.4.4 SQL節點及其解析 196
         16.5 再論SqlSource 202
         16.5.1 SqlSource的生成 202
         16.5.2 DynamicSqlSource的轉化 205
         16.5.3 RawSqlSource的轉化 206
         16.5.4 SqlSource接口的實現類總結 207
         第17章 datasource包 208
         17.1 背景知識 208
         17.1.1 java.sql包和javax.sql包 208
         17.1.2 DriverManager 209
         17.1.3 DataSource 209
         17.1.4 Connection 210
         17.1.5 Statement 211
         17.2 數據源工廠接口 211
         17.3 JNDI數據源工廠 213
         17.4 非池化數據源及工廠 214
         17.4.1 非池化數據源工廠 214
         17.4.2 非池化數據源 216
         17.5 池化數據源 218
         17.5.1 池化數據源類的屬性 218
         17.5.2 池化連接的給齣與收迴 220
         17.5.3 池化連接 228
         17.6 論數據源工廠 229
         第4篇 核心操作包源碼閱讀
         第18章 jdbc包 232
         18.1 AbstractSQL類與SQL類 232
         18.1.1 SafeAppendable內部類 232
         18.1.2 SQLStatement內部類 233
         18.1.3 AbstractSQL類 235
         18.1.4 SQL類 236
         18.2 SqlRunner類 237
         18.3 ScriptRunner類 240
         18.4 jdbc包的獨立性 241
         第19章 cache包 243
         19.1 背景知識 243
         19.1.1 Java對象的引用級彆 243
         19.1.2 ReferenceQueue類 244
         19.2 cache包結構與Cache接口 247
         19.3 緩存鍵 248
         19.3.1 緩存鍵的原理 248
         19.3.2 緩存鍵的生成 251
         19.4 緩存的實現類 252
         19.5 緩存裝飾器 252
         19.5.1 同步裝飾器 253
         19.5.2 日誌裝飾器 253
         19.5.3 清理裝飾器 254
         19.5.4 阻塞裝飾器 259
         19.5.5 定時清理裝飾器 262
         19.5.6 序列化裝飾器 263
         19.6 緩存的組建 264
         19.7 事務緩存 267
         19.8 MyBatis緩存機製 271
         19.8.1 一級緩存 271
         19.8.2 二級緩存 274
         19.8.3 兩級緩存機製 277
         第20章 transaction包 279
         20.1 事務概述 279
         20.2 事務接口及工廠 280
         20.3 JDBC事務 282
         20.4 容器事務 283
         第21章 cursor包 284
         21.1 Iterable接口與Iterator接口 284
         21.2 MyBatis中遊標的使用 285
         21.3 遊標接口 285
         21.4 默認遊標 286
         21.4.1 CursorStatus內部類 287
         21.4.2 ObjectWrapperResultHandler內部類 287
         21.4.3 CursorIterator內部類 288
         21.4.4 DefaultCursor外部類 289
         第22章 executor包 293
         22.1 背景知識 293
         22.1.1 基於cglib的動態代理 293
         22.1.2 javassist框架的使用 295
         22.1.3 序列化與反序列化中的方法 296
         22.1.4 ThreadLocal 302
         22.1.5 存儲過程 305
         22.1.6 Statement及其子接口 306
         22.2 主鍵自增功能 308
         22.2.1 主鍵自增的配置與生效 308
         22.2.2 Jdbc3KeyGenerator類 310
         22.2.3 SelectKeyGenerator類 312
         22.3 懶加載功能 316
         22.3.1 懶加載功能的使用 316
         22.3.2 懶加載功能的實現 318
         22.3.3 懶加載功能對序列化和反序列化的支持 325
         22.4 語句處理功能 329
         22.4.1 MyBatis對多語句類型的支持 329
         22.4.2 MyBatis的語句處理功能 331
         22.5 參數處理功能 333
         22.6 結果處理功能 334
         22.7 結果集處理功能 336
         22.7.1 MyBatis中多結果集的處理 337
         22.7.2 結果集封裝類 340
         22.7.3 結果集處理器 341
         22.8 執行器 347
         22.8.1 執行器接口 348
         22.8.2 執行器基類與實現類 348
         22.9 錯誤上下文 352
         第23章 session包 355
         23.1 SqlSession及其相關類 355
         23.1.1 SqlSession的生成鏈 356
         23.1.2 DefaultSqlSession類 357
         23.1.3 SqlSessionManager類 358
         23.2 Configuration類 361
         23.3 其他類 364
         第24章 plugin包 366
         24.1 責任鏈模式 366
         24.2 MyBatis插件開發 368
         24.3 MyBatis攔截器平颱 370
         24.4 MyBatis攔截器鏈與攔截點 373
         第5篇 總結與展望
         第25章 源碼閱讀總結 378
         25.1 前期準備 378
         25.1.1 工具準備 378
         25.1.2 項目選擇 378
         25.1.3 項目使用 379
         25.2 項目初探 379
         25.3 源碼閱讀 380
         25.3.1 模塊分析 380
         25.3.2 模塊歸類 380
         25.3.3 自底嚮上 380
         25.3.4 閤理猜測 381
         25.3.5 類比閱讀 381
         25.3.6 善於匯總 381
         25.3.7 網格閱讀 382
         第26章 優秀開源項目推薦 383
         26.1 Guava 383
         26.2 Tomcat 384
         26.3 Redis 384
         26.4 Dubbo 385
         26.5 React 385
      · · · · · ·     (
收起)