《Spring+MyBatis企業(yè)應(yīng)用實(shí)戰(zhàn)》主要介紹介紹了Java EE領(lǐng)域的兩個開源框架:Spring MVC和MyBatis。其中Spring的版本為5.0,MyBatis的版本是3.4.5。本書的示例建議在Tomcat 8上運(yùn)行。
《Spring+MyBatis企業(yè)應(yīng)用實(shí)戰(zhàn)》詳細(xì)介紹如何整合Spring MVC 5+MyBatis 3.4.5進(jìn)行Web應(yīng)用開發(fā),主要包括三個部分:
第一部分詳細(xì)介紹了Spring MVC框架的用法。
第二部分詳細(xì)介紹了MyBatis框架的用法。
第三部分重點(diǎn)介紹了Spring MVC 5+MyBatis 3.4.5的整合,并示范開發(fā)了一個包含6個表、表之間具有復(fù)雜的關(guān)聯(lián)映射關(guān)系,且業(yè)務(wù)功能也相對完善的HRM人事管理系統(tǒng)案例,希望讓讀者理論聯(lián)系實(shí)際,將這兩個框架真正運(yùn)用到實(shí)際開發(fā)當(dāng)中去。該案例采用目前流行、規(guī)范的Java EE架構(gòu),整個應(yīng)用分為DAO持久層、領(lǐng)域?qū)ο髮印I(yè)務(wù)邏輯層、控制器層和視圖層,各層之間分層清晰,層與層之間以松耦合的方法組織在一起。
所有代碼完全基于Eclipse IDE來完成,一步步帶領(lǐng)讀者深入兩個框架的核心。
適讀人群 :本書適合有較好的Java編程基礎(chǔ),JSP、Servlet、JDBC基礎(chǔ),Spring框架基礎(chǔ)的讀者,尤其適合于對Spring MVC和MyBatis了解不夠深入,或?qū)pring MVC+MyBatis整合開發(fā)不太熟悉的開發(fā)人員閱讀。
1. 基于Spring MVC 5+MyBatis 3.4.5全新升級。
2. 提供配套代碼及微信、QQ群答疑服務(wù)。
3.貼近實(shí)際項(xiàng)目,以案例驅(qū)動
本書針對每一個知識點(diǎn)都通過相應(yīng)的程序給出了示范,所有應(yīng)用范例都密切契合企業(yè)開發(fā)實(shí)際場景,例如用戶權(quán)限驗(yàn)證、文件上傳下載等都是企業(yè)開發(fā)實(shí)際功能,同時(shí)采用了目前企業(yè)流行、規(guī)范的開發(fā)架構(gòu),嚴(yán)格遵守Java EE開發(fā)規(guī)范。讀者參考本書的架構(gòu),完全可以身臨其境地感受企業(yè)實(shí)際項(xiàng)目開發(fā)。
4.內(nèi)容深入,講解細(xì)致
本書的特點(diǎn)是操作步驟詳細(xì),編程思路清晰,語言平實(shí)易懂。只要讀者認(rèn)真閱讀本書,并掌握書中知識,那么就完全可以勝任企業(yè)中Spring MVC+MyBatis項(xiàng)目開發(fā)的要求。
時(shí)至今日,以Spring為核心的輕量級Java EE企業(yè)開發(fā)平臺在企業(yè)開發(fā)中占有絕對的優(yōu)勢,Java EE應(yīng)用以其穩(wěn)定的性能、良好的開放性以及嚴(yán)格的安全性,深受企業(yè)應(yīng)用開發(fā)者的青睞,應(yīng)用的性能、穩(wěn)定性都有很好的保證。
輕量級Java EE開發(fā)大致可分為兩種方式:以Struts+Spring+Hibernate三大框架為核心的輕量級Java EE和以Spring MVC+MyBatis為核心的輕量級Java EE。這兩種組合都在保留經(jīng)典Java EE應(yīng)用架構(gòu)、高度可擴(kuò)展性、高度可維護(hù)性的基礎(chǔ)上,降低了Java EE應(yīng)用的開發(fā)、部署成本,對于大部分中小型企業(yè)應(yīng)用來說是首選。
本書重點(diǎn)介紹以Spring MVC+MyBatis為核心的輕量級Java EE。本書采用Tomcat 8作為Web服務(wù)器,Eclipse IDE作為開發(fā)工具,詳細(xì)介紹了Spring MVC和MyBatis框架。Spring MVC的配置全部使用注解方式,不再采用舊版本中傳統(tǒng)的XML配置方式;MyBatis則基于企業(yè)開發(fā)實(shí)際情況,首先介紹了傳統(tǒng)的XML持久化映射,之后又介紹了升級的注解持久化映射。
隨著Spring的不斷發(fā)展,Spring MVC已有取代Struts的能力,而MyBatis相對Hibernate而言則更為輕便、簡單,越來越多的公司選擇使用Spring MVC+MyBatis的輕量級框架組合來開發(fā)Java EE項(xiàng)目,因此掌握Spring MVC+MyBatis技術(shù)將為Java開發(fā)者帶來更多的就業(yè)機(jī)會與競爭力。
本書有什么特點(diǎn)
本書是一本介紹Spring MVC+MyBatis技術(shù)以及兩者整合的實(shí)用圖書,全面介紹了最新的Spring MVC和MyBatis各方面的知識。
本書針對每一個知識點(diǎn)都通過相應(yīng)的程序給出了示范,第13章的實(shí)戰(zhàn)項(xiàng)目“HRM人事管理系統(tǒng)”采用目前最流行、最規(guī)范的Java EE架構(gòu),整個應(yīng)用分為DAO持久層、領(lǐng)域?qū)ο髮印I(yè)務(wù)邏輯層、控制器層和視圖層,各層之間分層清晰,層與層之間以松耦合的方式組織在一起。筆者既擔(dān)任過軟件開發(fā)的技術(shù)經(jīng)理,也擔(dān)任過軟件公司的培訓(xùn)導(dǎo)師,現(xiàn)如今從事專業(yè)、高端的職業(yè)技術(shù)培訓(xùn)。本書所有應(yīng)用范例都密切契合企業(yè)開發(fā)實(shí)際場景,例如用戶權(quán)限驗(yàn)證、文件上傳下載等都是企業(yè)開發(fā)中要實(shí)現(xiàn)的實(shí)際功能,同時(shí)采用目前企業(yè)中頗為流行、規(guī)范的開發(fā)架構(gòu),嚴(yán)格遵守Java EE開發(fā)規(guī)范。讀者參考本書的架構(gòu),完全可以身臨其境地感受企業(yè)實(shí)際項(xiàng)目開發(fā)。
本書并不是一本關(guān)于所謂“思想”的書,也沒有一堆“深奧”的新名詞和“高深”的理論,只是讓讀者學(xué)會實(shí)際的Spring MVC和MyBatis技術(shù)。本書的特點(diǎn)是操作步驟詳細(xì),編程思路清晰,語言平實(shí)易懂。只要讀者認(rèn)真閱讀本書,并掌握書中知識,那么就完全可以勝任企業(yè)中的Spring MVC+MyBatis項(xiàng)目開發(fā)。
閱讀本書需要具備一定的計(jì)算機(jī)知識以及編程功底。熟練掌握J(rèn)ava語言和Spring框架的IOC、AOP和持久層的ORM設(shè)計(jì)模式等知識對于學(xué)習(xí)本書是很有必要的。
可訪問www.crazyit.org或www.broadview.com.cn/33780下載本書配套資源。
本書寫給誰看
如果你已經(jīng)掌握了Java SE的內(nèi)容,或已經(jīng)學(xué)完了瘋狂軟件教育的《瘋狂Java講義》一書,那么你非常適合閱讀此書。除此之外,如果你已有初步的JSP、Servlet、JDBC基礎(chǔ),甚至對Spring、MyBatis等框架有所了解,但希望掌握它們在實(shí)際開發(fā)中的應(yīng)用,本書也非常適合你。如果你對Java的掌握還不熟練,則建議遵從學(xué)習(xí)規(guī)律,循序漸進(jìn),暫時(shí)不要購買、閱讀此書,而是按照“瘋狂Java學(xué)習(xí)路線圖”中的建議順序?qū)W習(xí)。
衷心感謝
衷心感謝李剛老師,他是筆者非常好的朋友,在本書的創(chuàng)作過程中,他提供了大量切實(shí)、有用的幫助。同時(shí)衷心感謝瘋狂軟件教育中心所有同事提供的幫助。
感謝我的妻子王丹娜女士,她給了我生活上、精神上無微不至的關(guān)懷和照顧,并承擔(dān)幾乎所有的日常家務(wù),使我能夠心無旁騖地專注于程序的研究和書籍的撰寫。
感謝所有參加瘋狂軟件實(shí)訓(xùn)的學(xué)生,他們在實(shí)際工作場景的應(yīng)用中證明了本書的價(jià)值,他們的反饋?zhàn)尡緯訉?shí)用。
肖文吉
瘋狂軟件,多年來從事Java開發(fā)、移動開發(fā)等方面的培訓(xùn)及研發(fā)工作,承接大型研發(fā)項(xiàng)目。瘋狂軟件是廣州為學(xué)教育科技有限公司的教育品牌,立志以務(wù)實(shí)的技術(shù)來改變中國的軟件教育,所培訓(xùn)的學(xué)生入職華為、阿里軟件、唯品會、網(wǎng)易、IBM等IT名企。
第1章 Java EE應(yīng)用 1
1.1 Java EE應(yīng)用概述 2
1.1.1 Java EE應(yīng)用的分層模型 2
1.1.2 Java EE應(yīng)用的組件 3
1.1.3 Java EE應(yīng)用的結(jié)構(gòu)和優(yōu)勢 4
1.2 輕量級Java EE應(yīng)用相關(guān)技術(shù) 4
1.2.1 JSP、Servlet和JavaBean及替代技術(shù) 4
1.2.2 MyBatis 3及替代技術(shù) 5
1.2.3 Spring 5及替代技術(shù) 6
1.2.4 使用開源框架的好處 7
1.3 本章小結(jié) 7
第2章 Spring MVC簡介 8
2.1 MVC思想概述 9
2.1.1 傳統(tǒng)Model1和Model2 9
2.1.2 MVC思想及其優(yōu)勢 10
2.2 Struts 2和Spring MVC 11
2.2.1 Spring MVC的優(yōu)勢 11
2.2.2 Spring MVC和Struts 2的區(qū)別 11
2.3 開發(fā)第一個Spring MVC應(yīng)用 12
2.3.1 Spring的下載和安裝 12
2.3.2 Spring MVC的DispatcherServlet 13
2.3.3 基于Controller接口的控制器 14
示例:第一個Spring MVC應(yīng)用 14
示例:基于注解的控制器 18
2.4 詳解DispatcherServlet 20
2.5 Spring MVC執(zhí)行的流程 22
2.5.1 Spring MVC應(yīng)用的開發(fā)步驟 22
2.5.2 Spring MVC執(zhí)行的流程 24
2.6 本章小結(jié) 25
第3章 Spring MVC的常用注解 26
3.1 @Controller注解 27
示例:@Controller注解的使用 27
3.2 @RequestMapping注解 29
3.2.1 @RequestMapping注解簡介 29
3.2.2 請求處理方法中可出現(xiàn)的參數(shù)類型 32
3.2.3 請求處理方法可返回的類型 33
3.2.4 Model和ModelMap 33
示例:Model和ModelMap的使用 34
3.2.5 ModelAndView 35
示例:ModelAndView的使用 35
3.2.6 頁面轉(zhuǎn)發(fā) 35
3.3 @RequestParam注解 36
示例:@RequestMapping和@RequestParam注解的使用 37
3.4 @PathVariable注解 41
3.5 @MatrixVariable注解 42
3.6 @CrossOrigin注解 42
示例:@PathVariable注解和@MatrixVariable注解的使用 43
示例:@CrossOrigin注解的使用 45
3.7 @RequestHeader注解 46
示例:@RequestHeader注解的使用 47
3.8 @CookieValue注解 48
示例:@CookieValue注解的使用 49
3.9 @RequestAttribute注解 50
3.10 @SessionAttribute注解 50
示例:@RequestAttribute注解和@SessionAttribute注解的使用 51
3.11 @SessionAttributes注解 53
示例:@SessionAttributes注解的使用 53
3.12 @ModelAttribute注解 55
示例:@ModelAttribute注解的使用 55
3.13 @RequestBody注解 62
3.13.1 HttpMessageConverter<T>接口 62
3.13.2 轉(zhuǎn)換JSON數(shù)據(jù) 64
示例:@RequestBody接收J(rèn)SON格式的數(shù)據(jù) 65
示例:自定義HttpMessageConverter接收J(rèn)SON格式的數(shù)據(jù) 68
3.14 @ResponseBody注解 70
示例:@ResponseBody返回JSON格式的數(shù)據(jù) 70
示例:自定義HttpMessageConverter返回JSON格式的數(shù)據(jù) 72
3.15 轉(zhuǎn)換XML數(shù)據(jù) 72
示例:接收XML格式的數(shù)據(jù) 72
示例:返回XML格式的數(shù)據(jù) 75
3.16 @RestController注解 76
示例:@RestController注解的使用 76
3.17 Spring MVC的異常處理 77
3.17.1 Spring MVC異常處理接口以及實(shí)現(xiàn)類 77
示例:SimpleMappingExceptionResolver處理異常 78
3.17.2 @ResponseStatus注解 82
示例:@ResponseStatus處理異常 82
3.17.3 @ExceptionHandle注解 84
示例:@ExceptionHandler處理異常 84
3.17.4 @ControllerAdvice注解 87
示例:@ControllerAdvice處理異常 87
3.17.5 @RestControllerAdvice注解 91
示例:@RestControllerAdvice注解的使用 91
3.18 本章小結(jié) 92
第4章 Spring MVC的標(biāo)簽庫 93
4.1 表單標(biāo)簽庫 94
4.1.1 form標(biāo)簽 94
4.1.2 input標(biāo)簽 95
示例:form和input標(biāo)簽的使用 95
4.1.3 password標(biāo)簽 97
4.1.4 hidden標(biāo)簽 98
4.1.5 textarea標(biāo)簽 98
4.1.6 checkbox標(biāo)簽 99
示例:checkbox標(biāo)簽的使用 99
4.1.7 checkboxes標(biāo)簽 101
示例:checkboxes標(biāo)簽的使用 101
4.1.8 radiobutton標(biāo)簽 105
示例:radiobutton標(biāo)簽的使用 105
4.1.9 radiobuttons標(biāo)簽 106
示例:radiobuttons標(biāo)簽的使用 107
4.1.10 select標(biāo)簽 108
4.1.11 option標(biāo)簽 109
4.1.12 options標(biāo)簽 109
示例:select、option和options標(biāo)簽的使用 109
4.1.13 errors標(biāo)簽 113
示例:errors標(biāo)簽的使用 114
4.2 本章小結(jié) 116
第5章 Spring MVC的國際化 117
5.1 Spring MVC國際化的相關(guān)知識 118
5.1.1 messageSource接口 118
5.1.2 localeResolver接口 118
5.1.3 message標(biāo)簽 119
5.2 Spring MVC的國際化處理 119
5.2.1 AcceptHeaderLocaleResolver 119
示例:基于瀏覽器請求的國際化實(shí)現(xiàn) 119
5.2.2 SessionLocaleResolver 122
示例:基于HttpSession的國際化實(shí)現(xiàn) 123
5.2.3 CookieLocaleResolver 125
示例:基于Cookie的國際化實(shí)現(xiàn) 125
5.3 本章小結(jié) 127
第6章 Spring MVC的數(shù)據(jù)轉(zhuǎn)換、格式化和數(shù)據(jù)校驗(yàn) 128
6.1 數(shù)據(jù)綁定流程 129
6.2 數(shù)據(jù)轉(zhuǎn)換 129
6.2.1 ConversionService 129
6.2.2 Spring支持的轉(zhuǎn)換器 130
示例:使用ConversionService轉(zhuǎn)換數(shù)據(jù) 131
示例:使用@InitBinder添加自定義編輯器轉(zhuǎn)換數(shù)據(jù) 134
示例:使用WebBindingInitializer注冊全局自定義編輯器轉(zhuǎn)換數(shù)據(jù) 135
6.2.3 多種轉(zhuǎn)換器的優(yōu)先順序 135
6.3 數(shù)據(jù)格式化 136
示例:使用Formatter格式化數(shù)據(jù) 137
示例:使用FormatterRegistrar注冊Formatter 138
示例:使用AnnotationFormatterFactory <A extends Annotation>格式化數(shù)據(jù) 139
6.4 數(shù)據(jù)校驗(yàn) 142
6.4.1 Spring的Validation校驗(yàn)框架 143
示例:測試Spring的Validation校驗(yàn) 143
6.4.2 JSR 303校驗(yàn) 146
示例:測試JSR 303校驗(yàn) 147
6.5 本章小結(jié) 152
第7章 Spring MVC的文件上傳下載和攔截器機(jī)制 153
7.1 文件上傳 154
示例:Spring MVC的文件上傳 154
示例:使用對象接收上傳文件 157
7.2 文件下載 158
示例:Spring MVC的文件下載 158
7.3 攔截器 160
7.3.1 HandlerInterceptor接口 160
示例:攔截器實(shí)現(xiàn)用戶權(quán)限驗(yàn)證 161
7.4 本章小結(jié) 164
第8章 MyBatis簡介 165
8.1 ORM和MyBatis 166
8.1.1 對象/關(guān)系數(shù)據(jù)庫映射(ORM) 166
8.1.2 基本映射方式 167
8.1.3 流行的ORM框架簡介 168
8.1.4 MyBatis概述 168
8.2 MyBatis入門 169
8.2.1 MyBatis下載和安裝 169
示例:MyBatis的數(shù)據(jù)庫操作入門 170
8.3 本章小結(jié) 175
第9章 MyBatis的基本用法 176
9.1 MyBatis體系結(jié)構(gòu) 177
9.1.1 SqlSessionFactory 177
9.1.2 SqlSession 177
9.2 深入MyBatis的配置文件 179
9.2.1 MyBatis的配置文件結(jié)構(gòu) 180
9.2.2 properties屬性 180
9.2.3 settings設(shè)置 181
9.2.4 typeAliases類型命名 183
9.2.5 typeHandlers類型處理器 184
9.2.6 objectFactory對象工廠 185
9.2.7 environments配置環(huán)境 185
9.2.8 mapper映射器 187
9.3 MyBatis日志信息配置 188
9.3.1 log4j.properties配置日志 188
9.3.2 log4j.xml配置日志 189
9.4 深入Mapper XML映射文件 190
9.4.1 select 191
9.4.2 insert、update和delete 192
9.4.3 sql 194
9.4.4 參數(shù)(Parameters) 195
示例:測試select、insert、update和delete操作 195
9.4.5 ResultMaps 200
示例:測試ResultMaps 201
9.5 本章小結(jié) 208
第10章 深入使用MyBatis 209
10.1 MyBatis關(guān)聯(lián)映射 210
10.1.1 一對一 210
示例:OneToOneTest 210
10.1.2 一對多 213
示例:OneToManyTest 213
10.1.3 多對多 218
示例:ManyToManyTest 218
10.2 MyBatis動態(tài)SQL 225
示例:DynamicSQLTest 225
10.2.1 if 226
10.2.2 choose(when、otherwise) 229
10.2.3 where 230
10.2.4 set 232
10.2.5 foreach 233
10.2.6 bind 234
10.3 MyBatis調(diào)用存儲過程 234
示例:MyBatis調(diào)用存儲過程 235
10.3.1 插入數(shù)據(jù) 235
10.3.2 查詢數(shù)據(jù)返回集合 237
10.3.3 根據(jù)id查詢數(shù)據(jù)返回對象 238
10.3.4 修改數(shù)據(jù) 239
10.3.5 刪除數(shù)據(jù) 241
10.4 MyBatis事務(wù)管理 242
10.4.1 事務(wù)的概念 242
10.4.2 Transaction接口 243
10.4.3 事務(wù)的配置創(chuàng)建和使用 243
10.5 MyBatis緩存機(jī)制 247
10.5.1 一級緩存(SqlSession級別) 247
示例:OneLevelCacheTest 247
10.5.2 二級緩存(mapper級別) 251
示例:TwoLevelCacheTest 251
10.6 本章小結(jié) 254
第11章 MyBatis的注解配置 255
11.1 常用注解 256
11.2 注解的使用 256
示例:測試select、insert、update和delete操作 257
示例:測試一對一關(guān)聯(lián) 262
示例:測試一對多關(guān)聯(lián) 263
示例:測試多對多關(guān)聯(lián) 265
示例:測試動態(tài)SQL 267
示例:測試調(diào)用存儲過程 274
示例:測試二級緩存 276
11.3 本章小結(jié) 278
第12章 Spring 5整合MyBatis 3 279
12.1 開發(fā)環(huán)境搭建 280
12.2 準(zhǔn)備所需的jar包 280
12.3 準(zhǔn)備數(shù)據(jù)庫資源 280
12.4 完成配置文件 281
12.5 持久層功能實(shí)現(xiàn) 283
12.6 服務(wù)層功能實(shí)現(xiàn) 284
12.7 控制層功能實(shí)現(xiàn) 286
12.8 JSP頁面 288
12.9 測試Spring 5整合MyBatis 3 289
12.10 本章小結(jié) 290
第13章 實(shí)戰(zhàn)項(xiàng)目:人事管理系統(tǒng) 291
13.1 項(xiàng)目簡介及系統(tǒng)結(jié)構(gòu) 292
13.1.1 系統(tǒng)功能介紹 292
13.1.2 相關(guān)技術(shù)介紹 293
13.1.3 系統(tǒng)結(jié)構(gòu) 293
13.1.4 系統(tǒng)的功能模塊 294
13.2 數(shù)據(jù)表和持久化類 294
13.2.1 設(shè)計(jì)數(shù)據(jù)庫表 294
13.2.2 設(shè)計(jì)持久化實(shí)體 296
13.2.3 創(chuàng)建持久化實(shí)體類 297
13.3 實(shí)現(xiàn)DAO持久層 303
13.3.1 公共常量類 304
13.3.2 定義DAO接口 304
13.3.3 部署DAO層 318
13.4 實(shí)現(xiàn)Service持久層 319
13.4.1 業(yè)務(wù)邏輯組件的設(shè)計(jì) 319
13.4.2 實(shí)現(xiàn)業(yè)務(wù)邏輯組件 320
13.4.3 事務(wù)管理 335
13.4.4 部署業(yè)務(wù)邏輯組件 335
13.5 實(shí)現(xiàn)Web層 335
13.5.1 控制器的處理順序 335
13.5.2 用戶管理 339
13.5.3 部門管理 342
13.5.4 職位管理 345
13.5.5 員工管理 348
13.5.6 公告管理 351
13.5.7 下載中心 355
13.6 本章小結(jié) 359
附錄A EL表達(dá)式和JSTL標(biāo)簽庫 360