深入淺出MyBatis技術原理與實戰

深入淺出MyBatis技術原理與實戰

《深入淺出MyBatis技術原理與實戰》不是一本味同嚼蠟的理論專著,而是一本MyBatis 的實踐指南,無論你是Java 程式設計師、MyBatis開發者,還是Java 持久層框架的研究者,你都能從本書中收穫知識。

編輯推薦

本書開創國內對MyBatis技術套用的探索先河。本書首先是基於官方文檔論述的完善和具體實例的補充,並且詳細闡述了MyBatis內部運行原理和外掛程式開發過程,同時教你整合開發MyBatis-Spring項目。

沒有味同嚼蠟的理論說教,只有實實在在的方法套用,幫助你在一線工作中用好MyBatis。

內容提要

隨著大數據時代的到來,Java 持久層框架MyBatis 已經成為越來越多企業的選擇。遺憾的是,時至今日國內依然沒有一本討論MyBatis 的書,這增加了初學者的學習難度,初學者往往只能基於零星的案例來學習MyBatis,無法系統地掌握MyBatis,更不用說精通了。《深入淺出MyBatis 技術原理與實戰》是筆者通過大量實踐和研究源碼後創作而成的,是國內系統介紹MyBatis 著作的先河。

《深入淺出MyBatis技術原理與實戰》 分為3 個部分,依次介紹了MyBatis 的基礎套用、原理及外掛程式開發、實踐套用,使讀者能夠由淺入深、循序漸進地掌握MyBatis 技術。首先,《深入淺出MyBatis技術原理與實戰》在官方API 的基礎上完善了許多重要的論述和實例,並且給出了實操建議,幫助讀者正確掌握MyBatis。其次,《深入淺出MyBatis技術原理與實戰》詳細講述了MyBatis 的內部運行原理,並全面討論了外掛程式的開發。最後,本著學以致用的原則,筆者闡述了MyBatis-Spring 項目和一些MyBatis 開發常見的實例,使讀者能夠學得會,用得好。

目錄

第1 章 MyBatis 簡介 1

1.1 傳統的JDBC 編程 1

1.2 ORM 模型 4

1.3 Hibernate 4

1.4 MyBatis 9

1.5 什麼時候用MyBatis 12

第2 章 MyBaits 入門 13

2.1 開發環境準備.13

2.1.1 下載MyBatis 13

2.1.2 搭建開發環境 14

2.2 MyBatis 的基本構成 15

2.2.1 構建SqlSessionFactory 15

2.2.2 創建SqlSession19

2.2.3 映射器 21

2.3 生命周期.26

2.3.1 SqlSessionFactoryBuilder 27

2.3.2 SqlSessionFactory 27

2.3.3 SqlSession 27

2.3.4 Mapper 28

2.4 實例 28

第3 章 配置 37

3.1 properties 元素 38

3.1.1 property 子元素.38

3.1.2 properties 配置檔案 39

3.1.3 程式參數傳遞 39

3.1.4 優先權 40

3.2 設定 41

3.3 別名 44

3.3.1 系統定義別名 44

3.3.2 自定義別名 47

3.4 typeHandler 類型處理器.48

3.4.1 系統定義的typeHandler 49

3.4.2 自定義typeHandler 51

3.4.3 枚舉類型typeHandler55

3.5 ObjectFactory 62

3.6 外掛程式 65

3.7 environments 配置環境 65

3.7.1 概述65

3.7.2 資料庫事務 66

3.7.3 數據源 67

3.8 databaseIdProvider 資料庫廠商標識 68

3.8.1 使用系統默認規則 68

3.8.2 不使用系統默認規則69

3.9 引入映射器的方法 71

第4 章 映射器 73

4.1 映射器的主要元素 73

4.2 select 元素 74

4.2.1 概述74

4.2.2 簡易數據類型的例子75

4.2.3 自動映射.76

4.2.4 傳遞多個參數 78

4.2.5 使用resultMap 映射結果集 81

4.3 insert 元素 82

4.3.1 概述82

4.3.2 主鍵回填和自定義 83

4.4 update 元素和delete 元素 85

4.5 參數 85

4.5.1 參數配置.86

4.5.2 存儲過程支持 86

4.5.3 特殊字元串替換和處理(#和$) 87

4.6 sql 元素 88

4.7 resultMap 結果映射集 89

4.7.1 resultMap 元素的構成 89

4.7.2 使用map 存儲結果集91

4.7.3 使用POJO 存儲結果集 91

4.7.4 級聯92

4.8 快取cache 113

4.8.1 系統快取(一級快取和二級快取) 113

4.8.2 自定義快取 117

第5 章 動態SQL 119

5.1 概述119

5.2 if 元素 120

5.3 choose、when、otherwise 元素 120

5.4 trim、where、set 元素 121

5.5 foreach 元素 123

5.6 test 的屬性 124

5.7 bind 元素125

第6 章 MyBatis 的解析和運行原理 127

6.1 涉及的技術難點簡介 128

6.1.1 反射技術129

6.1.2 JDK 動態代理.130

6.1.3 CGLIB 動態代理 133

6.2 構建SqlSessionFactory 過程134

6.2.1 構建Configuration 135

6.2.2 映射器的內部組成 136

6.2.3 構建SqlSessionFactory 138

6.3 SqlSession 運行過程 138

6.3.1 映射器的動態代理 138

6.3.2 SqlSession 下的四大對象.142

6.3.3 SqlSession 運行總結150

第7 章 外掛程式.152

7.1 外掛程式接口152

7.2 外掛程式的初始化153

7.3 外掛程式的代理和反射設計154

7.4 常用的工具類——MetaObject 157

7.5 外掛程式開發過程和實例 159

7.5.1 確定需要攔截的簽名 159

7.5.2 實現攔截方法.161

7.5.3 配置和運行 162

7.5.4 外掛程式實例163

7.6 總結166

第8 章 MyBatis-Spring 168

8.1 Spring 的基礎知識.168

8.1.1 Spring IOC 基礎 169

8.1.2 Spring AOP 基礎 171

8.1.3 Spring 事務管理 173

8.1.4 Spring MVC 基礎 179

8.2 MyBatis-Spring 套用 181

8.2.1 概述 181

8.2.2 配置SqlSessionFactory 182

8.2.3 配置SqlSessionTemplate 184

8.2.4 配置Mapper 188

8.2.5 配置事務190

8.3 實例191

8.3.1 環境準備191

8.3.2 檔案目錄193

8.3.3 Spring 配置檔案 194

8.3.4 MyBatis 框架相關配置 198

8.3.5 配置服務層 205

8.3.6 編寫控制器 209

8.3.7 測試 210

8.4 總結210

第9 章 實用的場景 212

9.1 資料庫BLOB 欄位讀寫 212

9.2 批量更新215

9.3 調用存儲過程217

9.3.1 存儲過程in 和out 參數的使用217

9.3.2 存儲過程游標.220

9.4 分表225

9.5 分頁227

9.5.1 RowBounds 分頁 227

9.5.2 外掛程式分頁229

9.6 上傳檔案到伺服器239

9.7 在映射中使用枚舉247

9.8 多對多級聯 249

9.9 總結253

附錄A 資料庫模型描述與級聯學生關係建表語句.254

作者簡介

楊開振

長期從事Java開發工作,擁有近十年的Java開發經驗,目前就職於一家網際網路金融公司,擔任網際網路軟體開發職位。

IT技術的狂熱愛好者,熱衷於Java網際網路方向的軟體技術開發與研究。

熟練掌握Java基礎、軟體開發設計模式和資料庫相關知識,對Spring、MyBatis等主流Java開源框架有深入研究。

前言

隨著手機、平板電腦等移動終端的廣泛套用,移動網際網路時代已經到來。在這個時代里,構建一個高效的平台並提供服務是移動網際網路的基礎,在眾多的網站服務中,使用Java構建網站的不在少數。移動網際網路的特點是大數據、高並發,對伺服器往往要求分散式、高性能、高靈活等,而傳統模式的Java 資料庫編程框架已經不再適用了。在這樣的背景下,一個Java 的持久框架MyBatis 走入了我們的世界,它以封裝少、高性能、可最佳化、維護簡易等優點成為了目前Java 移動網際網路網站服務的首選持久框架,它特別適合分散式和大數據網路資料庫的編程。

本書主要講解了MyBatis 的套用。從目前的情況來看,國內圖書市場上沒有介紹MyBatis 的書籍,有的只是官方的API 和少數的幾篇部落格文章,國外圖書市場上的這類書籍也是鳳毛麟角,這使得系統學習MyBatis 困難重重。官方的API 只是簡單介紹了MyBatis有些什麼功能和一些基本的使用方法,沒有告訴我們如何用好,其中原理是什麼,需要注意哪些問題,這顯然是不夠的。有些部落格雖然講解得比較深入,但是內容支離破碎,沒有形成一個完整的知識體系,不易於初學者對MyBatis 進行系統學習。隨著移動網際網路套用的興起,系統掌握MyBatis 編程技巧已經成了用Java 構建移動網際網路網站的必要條件。為了順應時代的要求,筆者寫下了這本書,以期為廣大需要掌握MyBatis 的開發者提供學習和參考的資料。

閱讀本書要求開發人員擁有Java 語言基礎和JDBC 基礎知識,對資料庫也要掌握入門知識,最好能夠掌握常用的設計模式,因為在介紹MyBatis 構造時,常常涉及設計模式,尤其是第6 章和第7 章的內容。

本書以講解MyBatis 基礎運用和原理為主,所以適合初級到中高級開發人員閱讀。

本書分為三大部分。

第一部分是MyBatis 基礎套用,主要介紹如何高效地使用MyBatis。

第1 章:MyBatis 的內容簡介,告訴讀者MyBatis 是什麼,在何種場景下使用它。

第2 章:主要介紹MyBatis 的基礎模組及其生命周期,並給出實例。

第3 章:主要介紹MyBatis 配置的主要含義和內容。

第4 章:介紹MyBatis 映射器的主要元素及其使用方法。

第5 章:介紹動態SQL,助你輕鬆應對大部分的SQL 場景。

第二部分是MyBatis 原理,我們將深入源碼去理解MyBatis 的內部運行原理以及外掛程式的開發方法和技巧。

第6 章:介紹MyBatis 的解析和運行原理,我們將了解到SqlSession 的構建方法,以及其四大對象是如何工作的。

第7 章:在第6 章的基礎上著重介紹MyBatis 的外掛程式,這裡我們將學習外掛程式的設計原理,以及開發方法和注意的要點。

第三部分是MyBatis 的實戰套用,主要講解MyBatis 的一些實用的場景。

第8 章:介紹MyBatis-Spring,主要講解如何在Spring 項目中集成MyBatis 套用,幫助讀者在Spring 的環境中順利使用MyBatis。

第9 章:介紹MyBatis 的實用場景,精選一批典型且又常用的場景。詳細解析每一個場景下,開發人員需要注意避免的一些錯誤和性能上的損失。

MyBatis 源於2002 年的iBatis 項目,至今MyBatis 中依然有許多iBatis 的痕跡。本書默認使用MyBatis 的版本是3.3.0,使用MyBatis-Spring 的版本是1.2.3。而歷史上的iBatis的書籍已經跟不上技術發展的步伐,於是筆者通過自己的努力和實踐,在研究MyBatis 源碼的基礎上,寫作本書。從本書中既能學習如何使用MyBatis,也可以學習MyBatis 的原理和套用,為國內的MyBatis 開發者提供一條系統掌握MyBatis 編程技巧的捷徑,當然讀者也可以把本書作為工具書參考。在實際操作中,MyBatis 往往是結合Spring 使用的,於是本書花費了一些篇幅講解MyBatis-Spring 技術,筆者也會略略提到Spring 項目的內容,以便更好地論述它們。最後筆者還將講解一些使用頻率高、參考價值大的場景,使讀者能熟練掌握MyBatis 的開發。

本書堅持實用原則,對於一些使用頻率低的技術並沒有提及太多,比如註解SQL、SQL

構造器等內容,使用這些內容,會造成代碼的可讀性下降。

感謝我的公司為我提供真實的使用MyBatis 的環境,所有的程式代碼都經過了調試。感謝我的姐姐楊堅,她參與編寫並通篇審校了本書,潤色了那些晦澀的句子。同時也感謝電子工業出版社的編輯們,尤其是汪達文的全程跟進。沒有他們的辛苦付出,就沒有本書的成功出版。在出版本書的欣喜之餘,也伴著戰戰兢兢,因為筆者才疏學淺,很多東西都是從對源碼的理解和實際操作中獲得的,因此書中難免有疏漏之處,或有不能讓讀者滿意的地方。

楊開振

2016 年7 月

相關詞條

熱門詞條

聯絡我們