《通用源碼閱讀指導書》以開源軟體MyBatis的源碼為例,講述程式源碼閱讀的流程、方法、技巧。
本書先介紹MyBatis的發展背景與使用方法讓讀者對MyBatis建立概括性的認識,繼而逐步深入剖析MyBatis的源碼。並在剖析MyBatis源碼的過程講述源碼中所涉及到的程式語言知識、設計模式、架構技巧。最終使得讀者在詳細了解MyBatis源碼的同時掌握源碼閱讀的基本能力。
基本介紹
- 中文名:通用源碼閱讀指導書
- 別名:通用源碼閱讀指導書——MyBaits源碼詳解
- 作者:易哥
- 類別:計算機
- 出版社:電子工業出版社
- 出版時間:2020年7月1日
- 頁數:400 頁
- 定價:100 元
- 開本:16 開
- ISBN:9787121391460
- 正文字數:64 萬字
內容簡介,圖書目錄,作者簡介,
內容簡介
以開源軟體MyBatis的源碼為例,講述程式源碼閱讀的流程、方法、技巧。本書先介紹MyBatis的發展背景與使用方法讓讀者對MyBatis建立概括性的認識,繼而逐步深入剖析MyBatis的源碼。並在剖析MyBatis源碼的過程講述源碼中所涉及到的程式語言知識、設計模式、架構技巧。進而使得讀者在詳細了解MyBatis源碼的同時掌握源碼閱讀的基本能力。
圖書目錄
- 前言
- 【模組 一】背景介紹
- 1 源碼閱讀
- 1.1 源碼閱讀的意義
- 1.2 源碼閱讀的方法
- 1.3 開源軟體
- 1.4 MyBatis源碼
- 1.5 本書結構
- 1.5.1 背景知識
- 1.5.2 檔案的指代
- 1.5.3 方法的指代
2 MyBatis概述
- 2.1 背景介紹
- 2.1.1 傳統資料庫連線
- 2.1.2 ORM框架
- 2.1.3 MyBatis特點
2.2 快速上手
- 2.2.1 MyBatis包的引入
- 2.2.2 MyBatis的簡單配置
- 2.2.3 基於MyBatis的資料庫操作
2.3 MyBatis的核心功能分析
3 MyBatis運行初探
- 3.1 初始化階段追蹤
- 3.1.1 靜態代碼塊的執行
- 3.1.2 獲取InputStream
- 3.1.3 配置信息讀取
- 3.1.4 總結
3.2 數據讀寫階段追蹤
- 3.2.1 獲得SqlSession
- 3.2.2 映射接口檔案與映射檔案的綁定
- 3.2.3 映射接口的代理
- 3.2.4 SQL語句的查找
- 3.2.5 查詢結果快取
- 3.2.6 資料庫查詢
- 3.2.7 處理結果集
- 3.2.8 總結
4 MyBatis源碼結構概述
- 4.1 包結構
- 4.2 分組結構
【模組 二】基礎功能包源碼閱讀
5 exceptions包
- 5.1 背景知識
- 5.1.1 Java的異常
- 5.1.2 序列化與反序列化
5.2 Exception類
5.3 ExceptionFactory類
6 reflection包
- 6.1 背景知識
- 6.1.1 裝飾器模式
- 6.1.2 反射
- 6.1.3 Type接口及其子類
6.2 對象工廠子包
6.3 執行器子包
6.4 屬性子包
6.5 對象包裝器子包
6.6 反射核心類
6.7 反射包裝類
6.8 異常拆包工具
6.9 參數名解析器
6.10 泛型解析器
7 annotations包與lang包
- 7.1 背景知識
- 7.1.1 Java註解詳解
7.2 Param註解分析
8 type包
- 8.1 背景知識
- 8.1.1 模板模式
8.2 類型處理器
- 8.2.1 類型處理器基類與實現類
- 8.2.2 TypeReference類
8.3 類型註冊表
9 io包
- 9.1 背景知識
- 9.1.1 單例模式
- 9.1.2 代理模式
- 9.1.3 靜態代理
- 9.1.4 VFS
9.2 VFS實現
- 9.2.1 DefaultVFS
- 9.2.2 JBoss6VFS
9.3 類檔案的載入
9.4 ResolverUtil類
10 logging包
- 10.1 背景知識
- 10.1.1 適配器模式
- 10.1.2 日誌框架與日誌級別
- 10.1.3 基於反射的動態代理
10.2 Log接口
10.3 Log接口的實現類
10.4 LogFactory
10.5 JDBC日誌列印
11 parsing包
- 11.1 背景知識
- 11.1.1 XML檔案
- 11.1.2 XPath
11.2 XML解析
11.3 文檔解析中的變數替換
【模組 三】配置解析包源碼閱讀
12 配置解析概述
13 binding包
- 13.1 資料庫操作的接入
- 13.1.1 資料庫操作的方法化
- 13.1.2 資料庫操作方法的接入
13.2 抽象方法與資料庫操作節點的關聯
13.3 資料庫操作接入總結
- 13.3.1 初始化階段
- 13.3.2 數據讀寫階段
13.4 MyBatis與Spring、Spring Boot的整合
14 builder包
- 14.1 背景知識
- 14.1.1 建造者模式
- 14.2 建造者基類與工具類
- 14.3 SqlSourceBuilder與StaticSqlSource
- 14.4 CacheRefResolver和ResultMapResolver
- 14.4.1 CacheRefResolver類
- 14.4.2 ResultMapResolver類
14.5 ParameterExpression類
14.6 XML檔案解析
- 14.6.1 XML檔案的聲明解析
- 14.6.2 配置檔案解析
- 14.6.3 資料庫操作語句解析
- 14.6.4 Statement解析
- 14.6.5 引用解析
14.7 註解映射的解析
- 14.7.1 註解映射的使用
- 14.7.2 註解映射解析的觸發
- 14.7.3 直接註解映射的解析
- 14.7.4 間接註解映射的解析
15 mapping包
- 15.1 SQL語句處理功能
- 15.1.1 MappedStatement類
- 15.1.2 SqlSource類
- 15.1.3 BoundSql
15.2 輸出結果處理功能
- 15.2.1 ResultMap
- 15.2.2 ResultMapping
- 15.2.3 Discriminator
15.3 輸入參數處理功能
15.4 多資料庫種類處理功能
15.5 其他功能類
16 scripting包
- 16.1 背景知識
- 16.1.1 OGNL
16.2 語言驅動接口及語言驅動註冊表
16.3 SQL節點樹的組建
16.4 SQL節點樹的解析
- 16.4.1 OGNL輔助類
- 16.4.2 表達式求值器
- 16.4.3 動態上下文
- 16.4.4 SQL節點及其解析
16.5 再論SqlSource
- 16.5.1 SqlSource的生成
- 16.5.2 DynamicSqlSource的轉化
- 16.5.3 RawSqlSource的轉化
- 16.5.4 SqlSource接口的實現類總結
17 datasource包
- 17.1 背景知識
- 17.1.1 java.sql包和javax.sql包
- 17.1.2 DriverManager
- 17.1.3 DataSource
- 17.1.4 Connection
- 17.1.5 Statement
17.2 數據源工廠接口
17.3 JNDI數據源工廠
17.4 非池化數據源及工廠
- 17.4.1 非池化數據源工廠
- 17.4.2 非池化數據源
17.5 池化數據源
- 17.5.1 池化數據源類的屬性
- 17.5.2 池化連線的給出與收回
- 17.5.3 池化連線
17.6 論數據源工廠
【模組 四】核心操作包源碼閱讀
18 jdbc包
- 18.1 AbstractSQL類與SQL類
- 18.1.1 SafeAppendable內部類
- 18.1.2 SQLStatement內部類
- 18.1.3 AbstractSQL類
- 18.1.4 SQL類
18.2 SqlRunner
18.3 ScriptRunner
18.4 jdbc包的獨立性
19 cache包
- 19.1 背景知識
- 19.1.1 Java對象的引用級別
- 19.1.2 ReferenceQueue
19.2 cache包結構與Cache接口
19.3 快取鍵
- 19.3.1 快取鍵的原理
- 19.3.2 快取鍵的生成
19.4 快取的實現類
19.5 快取裝飾器
- 19.5.1 同步裝飾器
- 19.5.2 日誌裝飾器
- 19.5.3 清理裝飾器
- 19.5.4 阻塞裝飾器
- 19.5.5 定時清理裝飾器
- 19.5.6 序列化裝飾器
19.6 快取的組建
19.7 事務快取
19.8 MyBatis快取機制
- 19.8.1 一級快取
- 19.8.2 二級快取
- 19.8.3 兩級快取機制
20 transaction包
- 20.1 背景知識
- 20.1.1 事務概述
20.2 事務接口及工廠
20.3 JDBC事務
20.4 容器事務
21 cursor包
- 21.1 背景知識
- 21.1.1 Iterable接口與Iterator接口
21.2 MyBatis中游標的使用
21.3 游標接口
21.4 默認游標
- 21.4.1 CursorStatus內部類
- 21.4.2 ObjectWrapperResultHandler內部類
- 21.4.3 CursorIterator內部類
- 21.4.4 DefaultCursor外部類
22 executor包
- 22.1 背景知識
- 22.1.1 基於cglib的動態代理
- 22.1.2 javassist框架的使用
- 22.1.3 序列化與反序列化中的方法
- 22.1.4 ThreadLocal
- 22.1.5 存儲過程
- 22.1.6 Statement及其子接口
22.2 主鍵自增功能
- 22.2.1 主鍵自增的配置與生效
- 22.2.2 Jdbc3KeyGenerator
- 22.2.3 SelectKeyGenerator
22.3 懶載入功能
- 22.3.1 懶載入功能的使用
- 22.3.2 懶載入功能的實現
- 22.3.3 懶載入功能對序列化和反序列化的支持
22.4 語句處理功能
- 22.4.1 MyBatis對多語句類型的支持
- 22.4.2 MyBatis的語句處理功能
22.5 參數處理功能
22.6 結果處理功能
22.7 結果集處理功能
- 22.7.1 MyBatis中多結果集的處理
- 22.7.2 結果集封裝類
- 22.7.3 結果集處理器
22.8 執行器
- 22.8.1 執行器接口
- 22.8.2 執行器基類與實現類
22.9 錯誤上下文
23 session包
- 23.1 SqlSession及其相關類
- 23.1.1 SqlSession的生成鏈
- 23.1.2 DefaultSqlSession類
- 23.1.3 SqlSessionManager類
23.2 Configuration類
23.3 其他類
24 plugin包
- 24.1 背景知識
- 24.1.1 責任鏈模式
24.2 MyBatis外掛程式開發
24.3 MyBatis攔截器平台
24.4 MyBatis攔截器鏈與攔截點
【模組 五】總結與展望
25 源碼閱讀總結
- 25.1 前期準備
- 25.1.1 工具準備
- 25.1.2 項目選擇
- 25.1.3 項目使用
25.2 項目初探
25.3 源碼閱讀
- 25.3.1 模組分析
- 25.3.2 模組歸類
- 25.3.3 自底向上
- 25.3.4 合理猜測
- 25.3.5 類比閱讀
- 25.3.6 善於匯總
- 25.3.7 格線閱讀
26 優秀開源項目推薦
- 26.1 Guava
- 26.2 Tomcat
- 26.3 Redis
- 26.4 Dubbo
- 26.5 React
作者簡介
易哥,畢業於浙江大學、山東大學,高級軟體系統架構師、網路工程師、資料庫工程師、軟體測試工程師、註冊電氣工程師。
在校成績前1%,獲得國家獎學金兩次,一等獎學金四次,科技創新大賽一等獎三次,以及五四青年科學獎等。主要科研方向為機器學習、分散式算法、容錯算法在無線感測網路中的套用,相關論文獲得IEEE通信協會最佳論文獎。
曾擔任網站技術部門負責人,具有豐富的網際網路開發經驗。先後設計和實現了眾多系統和平台,也是活躍的開源開發者。現專注軟體系統架構設計與後端開發,著有書籍《通用源碼閱讀指導書》《高性能架構之道》等。