Java EE網際網路輕量級框架整合開發

Java EE網際網路輕量級框架整合開發

《Java EE網際網路輕量級框架整合開發》 全稱《Java EE網際網路輕量級框架整合開發——SSM框架(Spring MVC+Spring+MyBatis)和Redis實現》,作者楊開振、周吉文、梁華輝、譚茂華,電子工業出版社2017年7月出版

內容提要

隨著移動網際網路的興起,以Java技術為後台的網際網路技術占據了市場的主導地位,而在Java網際網路後台開發中,SSM框架(Spring+SpringMVC+MyBatis)成為了主要架構,《Java EE網際網路輕量級框架整合開發——SSM框架(Spring MVC+Spring+MyBatis)和Redis實現》以此為焦點從入門到實際工作要求講述了SSM框架的技術套用;與此同時,為了提高系統性能,NoSQL(尤其是Redis)在網際網路系統中已經廣泛使用,為了適應這個變化,《Java EE網際網路輕量級框架整合開發——SSM框架(Spring MVC+Spring+MyBatis)和Redis實現》通過Spring講解了有關Redis的技術套用,這樣更加貼近實際學習和工作的需要。

《Java EE網際網路輕量級框架整合開發——SSM框架(Spring MVC+Spring+MyBatis)和Redis實現》主要分為6個部分,第1部分對Java網際網路的框架和主要涉及的模式做初步簡介;第2部分講述MyBatis技術;第3部分講述Spring基礎(包括IoC、AOP和資料庫套用),重點講解Spring資料庫事務套用,以滿足網際網路企業的套用要求;第4部分,講述SpringMVC框架;第5部分,通過Spring技術的套用,講解Redis技術;第6部分,講解SSM+Redis實踐套用,通過網際網路高並發如搶票、搶紅包等場景,使用全註解的方式講解SSM框架的整合,以及高並發與鎖的套用和系統性能最佳化。

《Java EE網際網路輕量級框架整合開發——SSM框架(Spring MVC+Spring+MyBatis)和Redis實現》結合企業的實際需求,從原理到實踐全面講解SSM+Redis技術套用,無論你是Java程式設計師、SSM套用和研究人員,還是Redis套用人員、網際網路開發人員,都可以從《Java EE網際網路輕量級框架整合開發——SSM框架(Spring MVC+Spring+MyBatis)和Redis實現》中收穫知識。

目錄

第1部分 入門和技術基礎

第1章 認識SSM框架和Redis 2

1.1 Spring框架 2

1.1.1 Spring IoC簡介 2

1.1.2 Spring AOP 4

1.2 MyBatis簡介 6

1.2.1 Hibernate簡介 7

1.2.2 MyBatis 8

1.2.3 Hibernate和MyBatis的區別 11

1.3 Spring MVC簡介 11

1.4 最流行的NoSQL——Redis 12

1.5 SSM+Redis結構框圖及概述 13

第2章 Java設計模式 15

2.1 Java反射技術 15

2.1.1 通過反射構建對象 15

2.1.2 反射方法 17

2.1.3 實例 18

2.2 動態代理模式和責任鏈模式 19

2.2.1 JDK動態代理 20

2.2.2 CGLIB動態代理 22

2.2.3 攔截器 24

2.2.4 責任鏈模式 28

2.3 觀察者(Observer)模式 30

2.3.1 概述 31

2.3.2 實例 32

2.4 工廠模式和抽象工廠模式 35

2.4.1 普通工廠(Simple Factory)模式 35

2.4.2 抽象工廠(Abstract Factory)模式 36

2.5 建造者(Builder)模式 38

2.5.1 概述 38

2.5.2 Builder模式實例 39

2.6 總結 41

第2部分 網際網路持久框架——MyBatis

第3章 認識MyBatis核心組件 44

3.1 持久層的概念和MyBatis的特點 44

3.2 準備MyBatis環境 45

3.3 MyBatis的核心組件 46

3.4 SqlSessionFactory(工廠接口) 47

3.4.1 使用XML構建SqlSessionFactory 48

3.4.2 使用代碼創建SqlSessionFactory 50

3.5 SqlSession 50

3.6 映射器 51

3.6.1 用XML實現映射器 52

3.6.2 註解實現映射器 53

3.6.3 SqlSession傳送SQL 54

3.6.4 用Mapper接口傳送SQL 55

3.6.5 對比兩種傳送SQL方式 55

3.7 生命周期 55

3.7.1 SqlSessionFactoryBuilder 56

3.7.2 SqlSessionFactory 56

3.7.3 SqlSession 56

3.7.4 Mapper 56

3.8 實例 57

第4章 MyBatis配置 63

4.1 概述 63

4.2 properties屬性 64

4.2.1 property子元素 64

4.2.2 使用properties檔案 65

4.2.3 使用程式傳遞方式傳遞參數 66

4.2.4 總結 66

4.3 settings設定 66

4.4 typeAliases別名 69

4.4.1 系統定義別名 69

4.4.2 自定義別名 72

4.5 typeHandler類型轉換器 72

4.5.1 系統定義的typeHandler 73

4.5.2 自定義typeHandler 78

4.5.3 枚舉typeHandler 81

4.5.4 檔案操作 86

4.6 ObjectFactory(對象工廠) 87

4.7 外掛程式 89

4.8 environments(運行環境) 89

4.8.1 transactionManager(事務管理器) 90

4.8.2 environment數據源環境 92

4.9 databaseIdProvider資料庫廠商標識 95

4.9.1 使用系統默認的databaseIdProvider 95

4.9.2 不使用系統規則 98

4.10 引入映射器的方法 99

第5章 映射器 102

5.1 概述 102

5.2 select元素——查詢語句 103

5.2.1 簡單的select元素的套用 104

5.2.2 自動映射和駝峰映射 105

5.2.3 傳遞多個參數 106

5.2.4 使用resultMap映射結果集 109

5.2.5 分頁參數RowBounds 110

5.3 insert元素——插入語句 112

5.3.1 概述 112

5.3.2 簡單的insert語句的套用 113

5.3.3 主鍵回填 113

5.3.4 自定義主鍵 114

5.4 update元素和delete元素 114

5.5 sql元素 115

5.6 參數 116

5.6.1 概述 116

5.6.2 存儲過程參數支持 117

5.6.3 特殊字元串的替換和處理(#和$) 117

5.7 resultMap元素 118

5.7.1 resultMap元素的構成 118

5.7.2 使用map存儲結果集 119

5.7.3 使用POJO存儲結果集 119

5.8 級聯 120

5.8.1 MyBatis中的級聯 121

5.8.2 建立POJO 124

5.8.3 配置映射檔案 127

5.8.4 N+1問題 133

5.8.5 延遲載入 133

5.8.6 另一種級聯 137

5.8.7 多對多級聯 140

5.9 快取 143

5.9.1 一級快取和二級快取 144

5.9.2 快取配置項、自定義和引用 147

5.10 存儲過程 149

5.10.1 IN和OUT參數存儲過程 150

5.10.2 游標的使用 152

第6章 動態SQL 155

6.1 概述 155

6.2 if元素 156

6.3 choose、when、otherwise元素 156

6.4 trim、where、set元素 157

6.5 foreach元素 159

6.6 用test的屬性判斷字元串 159

6.7 bind元素 160

第7章 MyBatis的解析和運行原理 162

7.1 構建SqlSessionFactory過程 163

7.1.1 構建Configuration 165

7.1.2 構建映射器的內部組成 165

7.1.3 構建SqlSessionFactory 167

7.2 SqlSession運行過程 168

7.2.1 映射器(Mapper)的動態代理 168

7.2.2 SqlSession下的四大對象 172

7.2.3 SqlSession運行總結 179

第8章 外掛程式 181

8.1 外掛程式接口 181

8.2 外掛程式的初始化 182

8.3 外掛程式的代理和反射設計 183

8.4 常用的工具類——MetaObject 186

8.5 外掛程式開發過程和實例 187

8.5.1 確定需要攔截的簽名 187

8.5.2 實現攔截方法 189

8.5.3 配置和運行 191

8.5.4 外掛程式實例——分頁外掛程式 192

8.6 總結 205

第3部分 Spring基礎

第9章 Spring IoC的概念 208

9.1 Spring的概述 208

9.2 Spring IoC概述 210

9.2.1 主動創建對象 211

9.2.2 被動創建對象 213

9.2.3 Spring IoC闡述 214

9.3 Spring IoC容器 215

9.3.1 Spring IoC容器的設計 215

9.3.2 Spring IoC容器的初始化和依賴注入 218

9.3.3 Spring Bean的生命周期 219

9.4 小結 223

第10章 裝配Spring Bean 224

10.1 依賴注入的3種方式 224

10.1.1 構造器注入 224

10.1.2 使用setter注入 225

10.1.3 接口注入 226

10.2 裝配Bean概述 227

10.3 通過XML配置裝配Bean 228

10.3.1 裝配簡易值 228

10.3.2 裝配集合 229

10.3.3 命名空間裝配 233

10.4 通過註解裝配Bean 235

10.4.1 使用@Component裝配Bean 236

10.4.2 自動裝配——@Autowired 239

10.4.3 自動裝配的歧義性(@Primary和@Qualifier) 241

10.4.4 裝載帶有參數的構造方法類 244

10.4.5 使用@Bean裝配Bean 245

10.4.6 註解自定義Bean的初始化和銷毀方法 245

10.5 裝配的混合使用 246

10.6 使用Profile 249

10.6.1 使用註解@Profile配置 249

10.6.2 使用XML定義Profile 250

10.6.3 啟動Profile 252

10.7 載入屬性(properties)檔案 254

10.7.1 使用註解方式載入屬性檔案 254

10.7.2 使用XML方式載入屬性檔案 257

10.8 條件化裝配Bean 258

10.9 Bean的作用域 259

10.10 使用Spring表達式(Spring EL) 261

10.10.1 Spring EL相關的類 261

10.10.2 Bean的屬性和方法 264

10.10.3 使用類的靜態常量和方法 265

10.10.4 Spring EL運算 265

第11章 面向切面編程 267

11.1 一個簡單的約定遊戲 267

11.1.1 約定規則 267

11.1.2 讀者的代碼 269

11.1.3 筆者的代碼 271

11.2 Spring AOP的基本概念 274

11.2.1 AOP的概念和使用原因 274

11.2.2 面向切面編程的術語 278

11.2.3 Spring對AOP的支持 280

11.3 使用@AspectJ註解開發Spring AOP 280

11.3.1 選擇切點 281

11.3.2 創建切面 281

11.3.3 連線點 283

11.3.4 測試AOP 285

11.3.5 環繞通知 287

11.3.6 織入 289

11.3.7 給通知傳遞參數 289

11.3.8 引入 290

11.4 使用XML配置開發Spring AOP 293

11.4.1 前置通知、後置通知、返回通知和異常通知 294

11.4.2 環繞通知 296

11.4.3 給通知傳遞參數 297

11.4.4 引入 298

11.5 經典Spring AOP應用程式 299

11.6 多個切面 301

11.7 小結 306

第12章 Spring和資料庫編程 307

12.1 傳統的JDBC代碼的弊端 307

12.2 配置資料庫資源 309

12.2.1 使用簡單資料庫配置 309

12.2.2 使用第三方資料庫連線池 310

12.2.3 使用JNDI資料庫連線池 310

12.3 JDBC代碼失控的解決方案——jdbcTemplate 311

12.3.1 jdbcTemplate的增、刪、查、改 312

12.3.2 執行多條SQL 314

12.3.3 jdbcTemplate的源碼分析 315

12.4 MyBatis-Spring項目 317

12.4.1 配置SqlSessionFactoryBean 318

12.4.2 SqlSessionTemplate組件 322

12.4.3 配置MapperFactoryBean 324

12.4.4 配置MapperScannerConfigurer 324

12.4.5 測試Spring+MyBatis 327

第13章 深入Spring資料庫事務管理 330

13.1 Spring資料庫事務管理器的設計 331

13.1.1 配置事務管理器 333

13.1.2 用Java配置方式實現Spring資料庫事務 334

13.2 編程式事務 336

13.3 聲明式事務 337

13.3.1 Transactional的配置項 337

13.3.2 使用XML進行配置事務管理器 339

13.3.3 事務定義器 340

13.3.4 聲明式事務的約定流程 341

13.4 資料庫的相關知識 343

13.4.1 資料庫事務ACID特性 343

13.4.2 丟失更新 343

13.4.3 隔離級別 344

13.5 選擇隔離級別和傳播行為 347

13.5.1 選擇隔離級別 347

13.5.2 傳播行為 348

13.6 在Spring+MyBatis組合中使用事務 350

13.7 @Transactional的自調用失效問題 358

13.8 典型錯誤用法的剖析 363

13.8.1 錯誤使用Service 363

13.8.2 過長時間占用事務 364

13.8.3 錯誤捕捉異常 366

第4部分 Spring MVC框架

第14章 Spring MVC的初始化和流程 370

14.1 MVC設計概述 370

14.1.1 Spring MVC的架構 372

14.1.2 Spring MVC組件與流程 372

14.1.3 Spring MVC入門的實例 374

14.2 Spring MVC初始化 378

14.2.1 初始化Spring IoC上下文 378

14.2.2 初始化映射請求上下文 379

14.2.3 使用註解配置方式初始化 386

14.3 Spring MVC開發流程詳解 389

14.3.1 配置@RequestMapping 390

14.3.2 控制器的開發 391

14.3.3 視圖渲染 396

14.4 小結 398

第15章 深入Spring MVC組件開發 399

15.1 控制器接收各類請求參數 399

15.1.1 接收普通請求參數 401

15.1.2 使用@RequestParam註解獲取參數 402

15.1.3 使用URL傳遞參數 403

15.1.4 傳遞JSON參數 404

15.1.5 接收列表數據和表單序列化 406

15.2 重定向 409

15.3 保存並獲取屬性參數 412

15.3.1 註解@RequestAttribute 412

15.3.2 註解@SessionAttribute和註解@SessionAttributes 414

15.3.3 註解@CookieValue和註解@RequestHeader 417

15.4 攔截器 417

15.4.1 攔截器的定義 418

15.4.2 攔截器的執行流程 419

15.4.3 開發攔截器 419

15.4.4 多個攔截器執行的順序 421

15.5 驗證表單 424

15.5.1 使用JSR 303註解驗證輸入內容 425

15.5.2 使用驗證器 429

15.6 數據模型 432

15.7 視圖和視圖解析器 434

15.7.1 視圖 434

15.7.2 視圖解析器 436

15.7.3 實例:Excel視圖的使用 438

15.8 上傳檔案 441

15.8.1 MultipartResolver概述 442

15.8.2 提交上傳檔案表單 446

第16章 Spring MVC高級套用 449

16.1 Spring MVC的數據轉換和格式化 449

16.1.1 HttpMessageConverter和JSON訊息轉換器 451

16.1.2 一對一轉換器(Converter) 455

16.1.3 數組和集合轉換器GenericConverter 458

16.1.4 使用格式化器(Formatter) 463

16.2 為控制器添加通知 466

16.3 處理異常 470

16.4 國際化 471

16.4.1 概述 471

16.4.2 MessageSource接口 473

16.4.3 CookieLocaleResolver和SessionLocaleResolver 475

16.4.4 國際化攔截器(LocaleChangeInterceptor) 477

16.4.5 開發國際化 477

第5部分 Redis套用

第17章 Redis概述 480

17.1 Redis在Java Web中的套用 481

17.1.1 快取 481

17.1.2 高速讀/寫場合 482

17.2 Redis基本安裝和使用 483

17.2.1 在Windows下安裝Redis 483

17.2.2 在Linux下安裝Redis 485

17.3 Redis的Java API 486

17.3.1 在Java程式中使用Redis 487

17.3.2 在Spring中使用Redis 488

17.4 簡介Redis的6種數據類型 494

17.5 Redis和資料庫的異同 495

第18章 Redis數據結構常用命令 496

18.1 Redis數據結構——字元串 497

18.2 Redis數據結構——哈希 502

18.3 Redis數據結構——鍊表(linked-list) 506

18.4 Redis數據結構——集合 513

18.5 Redis數據結構——有序集合 516

18.5.1 Redis基礎命令 516

18.5.2 spring-data-redis對有序集合的封裝 518

18.5.3 使用Spring操作有序集合 520

18.6 基數——HyperLogLog 522

18.7 小結 524

第19章 Redis的一些常用技術 525

19.1 Redis的基礎事務 526

19.2 探索Redis事務回滾 528

19.3 使用watch命令監控事務 529

19.4 流水線(pipelined) 532

19.5 發布訂閱 534

19.6 逾時命令 538

19.7 使用Lua語言 540

19.7.1 執行輸入Lua程式代碼 541

19.7.2 執行Lua檔案 544

19.8 小結 547

第20章 Redis配置 548

20.1 Redis基礎配置檔案 548

20.2 Redis備份(持久化) 549

20.3 Redis記憶體回收策略 552

20.4 複製 553

20.4.1 主從同步基礎概念 553

20.4.2 Redis主從同步配置 554

20.4.3 Redis主從同步的過程 555

20.5 哨兵(Sentinel)模式 556

20.5.1 哨兵模式概述 557

20.5.2 搭建哨兵模式 558

20.5.3 在Java中使用哨兵模式 559

20.5.4 哨兵模式的其他配置項 563

第21章 Spring快取機制和Redis的結合 565

21.1 Redis和資料庫的結合 565

21.1.1 Redis和資料庫讀操作 566

21.1.2 Redis和資料庫寫操作 567

21.2 使用Spring快取機制整合Redis 568

21.2.1 準備測試環境 568

21.2.2 Spring的快取管理器 573

21.2.3 快取註解簡介 575

21.2.4 註解@Cacheable和@CachePut 576

21.2.5 註解@CacheEvict 580

21.2.6 不適用快取的方法 581

21.2.7 自調用失效問題 582

21.3 RedisTemplate的實例 582

第6部分 SSM框架+Redis實踐套用

第22章 高並發業務 586

22.1 互聯繫統套用架構基礎分析 586

22.2 高並發系統的分析和設計 588

22.2.1 有效請求和無效請求 588

22.2.2 系統設計 590

22.2.3 資料庫設計 591

22.2.4 動靜分離技術 593

22.2.5 鎖和高並發 594

22.3 搭建搶紅包開發環境和超發現象 595

22.3.1 搭建Service層和DAO層 595

22.3.2 使用全註解搭建SSM開發環境 602

22.3.3 開發控制器和超發現象測試 609

22.4 悲觀鎖 611

22.5 樂觀鎖 614

22.5.1 CAS原理概述 614

22.5.2 ABA問題 615

22.5.3 樂觀鎖實現搶紅包業務 616

22.5.4 樂觀鎖重入機制 618

22.6 使用Redis實現搶紅包 621

22.6.1 使用註解方式配置Redis 621

22.6.2 數據存儲設計 622

22.6.3 使用Redis實現搶紅包 627

22.7 各類方式的優缺點 631

附錄A 資料庫表模型 633

附錄B DispatcherServlet流程源碼分析 637

附錄C JSTL常用標籤 648

附錄D spring data redis項目分析 660

相關詞條

熱門詞條

聯絡我們