評論(0

iBATIS框架源碼剖析

標籤: 暫無標籤

《iBATIS框架源碼剖析》圖書由作者任 鋼編著,於2010年6月出版發行。

1 iBATIS框架源碼剖析 -圖書信息

  書名:任 鋼 編著

iBATIS框架源碼剖析

作者:卓越科技 編著

  ISBN 978-7-121-10872-3

  出版日期:2010年6月

  定價:79.00元(含CD光碟1張)

  開本:16開

  頁碼:524頁

2 iBATIS框架源碼剖析 -宣傳語

  iBATIS——目前主流的ORM框架

  Java軟體設計師、架構師案頭必備參考用書

3 iBATIS框架源碼剖析 -內 容 簡 介

  本書分為三個部分,第一部分是介紹iBATIS的一些基礎知識;第二部分是介紹iBATIS DAO的框架結構及其實現;第三部分是針對iBATIS的底層平台iBATIS SQL Map進行分析。其中第三部分是主要內容:首先剖析了SQL Map是如何讀取配置信息的;其次說明了SQL Map引擎的實現,勾畫出iBATIS SQL Map的框架結構,描述其核心實現機制和主要實現步驟;再次說明SQL Map如何用來實現資料庫處理,包括事務管理、資料庫連接池,以及SQL Map中Mapping的實現,這也是iBATIS不同於其他ORM框架的獨創性實現;最後就是一些常用的實現,如 TypeHandler類型轉化和iBATIS常用工具的實現。

  在源碼剖析過程中,本書採用了代碼註釋、UML分析和設計、GoF設計模式抽象和歸類、代碼跟蹤和案例的講解和說明。其目的是讓讀者全方位地了解iBATIS的實現框架和實現手段。一方面讓讀者理解開發者的思路,另一方面也是幫助讀者在實際工作中能應用這些策略、方法和編程技巧。

  本書適用於軟體設計師、架構師和一些有較好Java基礎的開發人員,既可以作為iBATIS的學習指南,也可以給軟體架構師在設計方面進行參考。

4 iBATIS框架源碼剖析 -前 言

  搞IT技術已經有十多年的歷史了,接觸Java語言也有一定的時間了。為什麼到現在才要寫這本書呢?幾年前我開發過一個ORM模型框架,當時的思路居然與iBATIS框架有一些類似(可見英雄所見略同)。於是,為了更好地實現這個ORM框架,我仔細閱讀了iBATIS框架的源碼。在閱讀過程中,由於iBATIS框架代碼層層疊疊、峰迴路轉、跌宕起伏,為了理清框架的主要思路和核心實現方式、加快理解速度和加深理解深度,我用PowerDesigner畫了一些UML圖,並做了一些閱讀筆記和備忘錄。一個月下來,基本上從總體架構上了解了iBATIS框架的實現。這時候閱讀筆記和備忘錄已大約積累了好幾萬字。我想,如果能把這些筆記和備忘錄進行系統化、簡單化、章節化的整理,就可以給更多iBATIS愛好者使用。同樣,這些學習心得對軟體架構師、軟體開發工程師等都非常有價值,所謂它山之石,可以攻玉。於是,我決定寫一本關於iBATIS框架源碼剖析的書籍。而在實際操作中,我覺得在講述iBATIS源碼的同時,已經涉及很多關於ORM的內容,也有一些Java的基礎處理和編程技巧,甚至還包括一些經典的設計模式。

  在國內介紹和講述開源軟體的書可謂是琳琅滿目,不勝枚舉。但這些書基本上都歸納為應用型或工具型,更趨向於軟體的使用說明或使用指南之類。而且,在全球這麼多開源框架代碼中,中國做出的貢獻還是非常少的。分析原因,主要是我們熱衷於拿來主義,直接就用,能解決問題就行。而對於源碼,也許只有在使用過程中遇到了障礙,為了解決問題才做一些源碼閱讀和分析,這也是國內許多人很少去分析開源框架源碼的原因,而且介紹開源軟體實現的書籍也是鳳毛麟角。我寫這本書的目的,就是希望在這方面能與大家多分享一些學習心得和體會。

  對於開源代碼,能讀懂並搞明白是一回事。但是理解了源代碼,把這些東西用文字表述出來,讓別人也能理解卻是另一回事。我覺得後者的難度遠遠大於前者。當然,如果僅僅是簡單地介紹iBATIS框架,我相信只要有幾句話就能說清楚。但是要把一個實現框架說得條理清晰、層次鮮明,這不僅僅要求有一定的技術背景,還要有文字語言的表達和掌控能力。我用一個月時間就基本上搞明白了iBATIS框架的內容,但是要把它寫出來,的確非常頭疼。有的時候要非常細緻地去推敲,因為很多瑣碎的細節決定了整個框架的核心,這需要有一定的耐心和抽象能力。同時閱讀和理解程序源碼是一種實踐性非常強的工作,所謂讀書破萬卷,下筆如有神,這是一個真理。但若閱讀並理解了幾十萬行程序代碼后,再來編寫程序代碼,那基本上就可以非常有章法並有一定的深度了。事實上,中國大學目前計算機教育的水平是基礎性質的,對於如何去閱讀源碼沒有相關的課程來進行講授。對於源碼的分析有什麼辦法、手段和策略,即如何把那些複雜的程序代碼用簡單的語言表達出來,讓別人能迅速地理解並掌握,中國的教育還是做得不夠的,也沒有專人或學者來搞這方面的研究。但筆者覺得這項工作是非常重要,而且也是很有意義的。事實上,每個開發人員和設計人員在實踐中都有自己的一套讀取和分析源碼方法。當然這也是仁者見仁、智者見智的事。我的方法和手段只是其中之一而已。所以說我在編寫這本書時對源碼的剖析只是做了一些非常粗淺但是有意義的嘗試,以試圖彌補國內軟體行業在這方面的缺陷。

  當然,閱讀本書也要具備一定的基礎知識,否則,有些術語和解釋還是比較難以理解的。

  我在本書的編寫過程中花費了大量的時間。而且,這些工作都是在業餘時間內完成的,每天都要照常上班,只有到了晚上或者節假日,才有閑暇寫這些東西。一般技術人員都喜歡新鮮事物,如果說去閱讀和理解開源代碼,也許還有一些挑戰性,大家可能都有興趣去做這件事情,但是要把這些東西用文字表述出來並給別人講述,則許多人就不太願意幹了,原因是這是一項非常枯燥的任務,寫作的艱辛旁人是很難理解的。很高興的是我還是堅持下來了,度過了無數個寂寞和孤單的晚上終於把這本書奉獻給了讀者。

  在這期間,我要感謝我的家人對我的理解和支持。我要感謝我的妻子在這期間承擔了全部的家務,同時也要感謝我女兒在我撰寫書稿的時候沒給我添太多的麻煩,她一直沒有搞明白爸爸總是待在電腦前做什麼。我要感謝我的父母,他們肯定不知道我寫的內容,但是無論我做什麼,有沒有成績,他們都是一如既往地給予鼓勵。我把這裡的一切都獻給他們。

  我還要感謝本書的編輯高洪霞和顧慧芳。沒有她們耐心的指導和完善,這本書也許只是一個讀書筆記,我也要感謝本書的策劃編輯袁金敏,是她給我信心讓我繼續下去,否則這些資料只能是束之高閣。我還要感謝那些在編寫本書做出貢獻的所有人,他們都是默默無聞的後台工作者。

  當然,由於筆者水平有限,書中的錯誤和缺點在所難免,希望讀者能給予批評和指正。

  編 者

  2009年12月於北京

5 iBATIS框架源碼剖析 -目 錄

  第一部分 iBATIS的基礎知識

  第1章 iBATIS概述 2

  1.1 iBATIS概論 2

  1.2 ORM模型介紹 4

  1.2.1 什麼是ORM 4

  1.2.2 ORM的實現方式 4

  1.2.3 常用的ORM框架 8

  1.2.4 ORM模型和持久層框架 9

  1.3 iBATIS的組件和實現的功能 10

  1.3.1 iBATIS的DAO組件 10

  1.3.2 iBATIS SQL Map組件 11

  第2章 相關的技術背景和基礎知識 13

  2.1 面向對象和UML基本知識 13

  2.1.1 面向對象基礎 13

  2.1.2 UML基礎知識 15

  2.1.3 UML圖 16

  2.1.4 類和介面以及之間的關係 18

  2.2 Java基礎知識 26

  2.2.1 Java的I/O操作 27

  2.2.2 Java解析XML文檔 27

  2.2.3 Java的線程管理 29

  2.2.4 Java的反射機制 31

  2.2.5 Java的動態Proxy 32

  2.2.6 JDBC和JDBC擴展 33

  2.2.7 JavaBean 34

  2.2.8 JNDI 35

  2.3 資料庫相關基礎知識 37

  2.3.1 SQL 37

  2.3.2 資料庫事務管理 38

  2.4 Java EE規範相關知識 39

  2.5 開源ORM框架 40

  2.5.1 Hibernate 40

  2.5.2 toplink 42

  2.5.3 Apache OJB 42

  2.6 其他開源框架 43

  2.6.1 與Log相關的開源框架 43

  2.6.2 OSCache 44

  2.6.3 Commons-DBCP資料庫連 接池 45

  2.7 GoF的23種設計模式 45

  第3章 安裝和配置iBATIS源碼 48

  3.1 安裝和配置iBATIS SQL Map源碼環境 48

  3.2 安裝和配置iBATIS DAO源碼環境 50

  3.3 安裝和配置iBATIS Jpetstore源碼環境 51

  3.3.1 iBATIS JPetStore源碼環境配置 51

  3.3.2 創建iBATIS JPetStore的應用 53

  3.3.3 安裝iBATIS JPetStore的MySQL資料庫 53

  3.3.4 安裝MySQL資料庫的管理工具 58

  3.3.5 配置成功的標誌 60

  第二部分 iBATIS DAO框架源碼剖析

  第4章 iBATIS DAO體系結構和實現 64

  4.1 iBATIS DAO基本結構 64

  4.1.1 Java EE核心設計模式——DAO模式介紹 65

  4.1.2 iBATIS DAO包文件和組件結構 66

  4.1.3 使用iBATIS DAO工作流程 67

  4.2 iBATIS DAO外部介面和實現 68

  4.2.1 iBATIS DAO框架外部介面 68

  4.2.2 iBATIS DAO Template API結構和說明 69

  4.3 DAO配置文件讀取 72

  4.3.1 dao.xml的格式說明 72

  4.3.2 dao.xml文件的讀取過程 73

  4.3.3 如何驗證dao.xml文件 82

  4.3.4 dao.xml配置文件實例說明 84

  4.4 iBATIS DAO引擎實現 87

  4.4.1 DAO業務實現的序列圖和說明 87

  4.4.2 iBATIS DAO組件管理 90

  4.4.3 iBATIS DAO事務管理實現 94

  4.5 基於iBATIS DAO SqlMap的實例說明 124

  4.6 讀取源碼的收穫 132

  第三部分 iBATIS的底層平台——iBATIS SQL Map的分析

  第5章 iBATIS SQL Map體系結構和剖析 134

  5.1 SQL Map實現的功能和原理 134

  5.2 SQL Map組件的包結構和文件結構 136

  5.3 SQL Map的組件結構 137

  第6章 SQL Map配置信息的讀取 139

  6.1 XML文件的驗證處理 139

  6.1.1 XML驗證處理的通用模式 139

  6.1.2 iBATIS SQL Map的XML驗證 142

  6.2 解析SQL Map配置文件 145

  6.2.1 SqlMapConfig.xml的格式說明 145

  6.2.2 SqlMapConfig.xml文件讀取總體說明 147

  6.2.3 基於設計模式中策略模式的數據執行 152

  6.2.4 基於遞歸和路徑來實現配置文件的全部遍歷 157

  6.2.5 XmlParserState對象在解析SQL Map XML配置文件的協調者角色 159

  6.2.6 配置的一級門面SqlMapConfiguration實例化對象 162

  6.2.7 一級應用門面SqlMapExecutorDelegate實例化對象 164

  6.2.8 SQL Map配置文件中節點解析的通用處理 165

  6.2.9 資料庫事務節點的解析和轉化 167

  6.2.10 配置文件其他節點的解析和轉化 170

  6.3 解析SQL Map映射文件 178

  6.3.1 SQL Map XML映射文件格式 178

  6.3.2 SQL Map XML映射文件讀取總體說明 182

  6.3.3 XmlParserState對象解析SQL Map映射文件的協調者角色 185

  6.3.4 cacheModel節點的解析和轉化 187

  6.3.5 parameterMap節點的解析和轉化 194

  6.3.6 resultMap節點的解析和轉化 200

  6.3.7 statement類型節點的解析和轉化 212

  6.3.8 對SQL的處理 223

  6.4 抽象出通用的XML解析

  6.4 框架 229

  6.5 讀取源碼的收穫 235

  第7章 SQL Map引擎實現框架 236

  7.1 SQL Map引擎實現框架的

  7.1 組成 236

  7.2 業務運行過程和介紹 239

  7.2.1 總體業務運行過程序列圖 239

  7.2.2 系統總體運行簡化說明圖 240

  7.3 業務實現類的分析 242

  7.3.1 業務實現類 243

  7.3.2 配置信息類 254

  7.3.3 運行狀態信息類 256

  7.4 業務實現分析 258

  7.4.1 業務實現兩個階段的分析 258

  7.4.2 查詢類業務實現過程 259

  7.4.3 單事務業務操作實現過程 264

  7.4.4 聯合事務處理實現過程 266

  7.4.5 存儲過程的處理 272

  7.4.6 批處理及其實現 275

  7.4.7 全局JTA事務的處理 277

  7.4.8 全局外部事務的處理 278

  7.4.9 用戶自定義資料庫Connection處理 279

  7.5 讀取源碼的收穫 280

  第8章 SQL Map資料庫處理 281

  8.1 SQL Map的transactionManager 282

  8.1.1 Java事務簡介 282

  8.1.2 SQL Map的transaction Manager概述 282

  8.1.3 SQL Map事務管理的設計模式 283

  8.2 系統如何調用事務管理和

  8.2 SQL Map事務策略 285

  8.2.1 SQL Map如何調用事務 285

  8.2.2 Java事務類型 286

  8.2.3 SQL Map中JDBC事務實現 290

  8.2.4 SQL Map中JTA事務實現 293

  8.2.5 SQL Map的External事務實現 297

  8.2.6 SQL Map的用戶事務實現 298

  8.3 SQL Map的DataSource策略 298

  8.3.1 關於DataSource的說明 298

  8.3.2 SQL Map的DataSource結構和內容 300

  8.3.3 SIMPLE策略的實現 302

  8.3.4 DBCP策略實現 302

  8.3.5 JNDI策略實現 304

  8.4 SQL Map自定義DataSource實現 306

  8.4.1 DataSource介面的結構 306

  8.4.2 實現DataSource的設計思路 306

  8.4.3 SimpleDataSource設計和實現 308

  8.5 SQL Map擴展DataSource為c3p0 322

  8.6 SQL Map如何進行批處理 324

  8.7 SQL Map事務隔離的實現 327

  8.7.1 JDBC事務隔離概述 327

  8.7.2 SQL Map的事務隔離的實現 328

  8.8 SQL Map事務狀態的實現 329

  8.9 讀取源碼的收穫 330

  第9章 SQL Map中Mapping實現 332

  9.1 ParameterMap框架及其說明 333

  9.1.1 ParameterMap總體框架說明 333

  9.1.2 ParameterMap組件中各個類介紹 334

  9.1.3 ParameterMap框架如何工作 335

  9.2 ResultMap框架及其說明 338

  9.2.1 ResultMap框架介紹 338

  9.2.2 ResultMap框架說明 339

  9.2.3 ResultMap中的類說明 340

  9.2.4 ResultMap框架是如何工作的 341

  9.2.5 如何實現子查詢 342

  9.2.6 延遲載入的實現 345

  9.3 Statement框架及其說明 348

  9.3.1 Statement介紹 348

  9.3.2 Statement框架總體結構 349

  9.3.3 Statement組件中的類介紹 350

  9.3.4 MappedStatement是如何工作的 354

  9.3.5 Statement緩存的實現 361

  9.3.6 自動生成的主鍵 363

  9.4 Sql框架及其說明 367

  9.4.1 Sql介面框架 367

  9.4.2 SqlChild介面框架 368

  9.4.3 Sql介面方法 368

  9.4.4 靜態SQL的實現 369

  9.4.5 簡單動態SQL的實現 370

  9.4.6 動態SQL語言的實現 372

  9.5 數據對象轉換框架及其說明 379

  9.5.1 DataExchange組件作用、內容和設計模式 380

  9.5.2 Accessplan組件的

  3.3.1 設計模式 393

  9.5.3 DataExchange和Accessplan在系統中如何實現 399

  9.6 讀取源碼的收穫 404

  第10章 SQL Map緩存管理和實現 405

  10.1 SQL Map緩存結構和組成 406

  10.2 系統如何使用緩存 407

  10.2.1 緩存實現的序列圖和說明 407

  10.2.2 CacheModel類緩存的實現 409

  10.2.3 唯一性CacheKey對象的產生 411

  10.3 緩存策略的程序實現 412

  10.3.1 FIFO緩存實現 413

  10.3.2 LRU緩存實現 415

  10.3.3 MEMORY緩存實現 417

  10.3.4 OSCACHE緩存實現 420

  10.4 擴展緩存策略——增加先進後出緩存策略 422

  10.5 讀取源碼的收穫 425

  第11章 TypeHandler類型轉化 426

  11.1 Java的數據類型的說明 426

  11.2 TypeHandler組件的框架結構 427

  11.3 TypeHandlerFactory的結構、作用和實現 428

  11.3.1 TypeHandlerFactory的別名處理 428

  11.3.2 TypeHandlerFactory容器 的數據類型轉化 430

  11.4 TypeHandler的實現 431

  11.4.1 一般類型的處理 433

  11.4.2 Sql類型的處理 434

  11.4.3 通用類型的處理 436

  11.4.4 定製數據類型的轉化 438

  11.5 讀取源碼的收穫 440

  第12章 iBATIS常用工具的實現 441

  12.1 Resources工具 441

  12.1.1 資源載入 441

  12.1.2 實例化類並緩存 445

  12.2 Bean管理 447

  12.2.1 ClassInfo類 447

  12.2.2 Probe介面及其實現 453

  12.3 Log管理 468

  12.4 調試信息工具 472

  12.5 ScriptRunner的應用 472

  12.6 讀取源碼的收穫 476

  附錄一 第4章 dao-2.dtd 478

  附錄二 第5章 SqlMapConfig.xml的DTD結構 479

  附錄三 第5章 SqlMapConfig.xml的xsd結構 484

  附錄四 第5章 SqlMapMapping.xml的DTD結構 486

  附錄五 第5章 SqlMapMapping.xml的XSD結構 500

  附錄六 第11章 JDBC Types Mapped to Java Types 503

  附錄七 第11章 Java Types

  附錄七:Mapped to JDBC Types 504

  附錄八 第11章 JDBC Types Mapped to Java Object 505

  附錄九 第11章 Java Object TypesMapped to JDBC Types 506

  附錄十 第11章 JDBC Types Mapped to Database-specific SQL Types 507

  參考文獻 509

上一篇[IBM A31P]    下一篇 [iBATIS實戰]

相關評論

同義詞:暫無同義詞