《Spring+MyBatis企業(yè)應(yīng)用實(shí)戰(zhàn)》主要介紹介紹了Java EE領(lǐng)域的兩個(gè)開(kāi)源框架: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)用開(kāi)發(fā),主要包括三個(gè)部分:
第一部分詳細(xì)介紹了Spring MVC框架的用法。
第二部分詳細(xì)介紹了MyBatis框架的用法。
第三部分重點(diǎn)介紹了Spring MVC 5+MyBatis 3.4.5的整合,并示范開(kāi)發(fā)了一個(gè)包含6個(gè)表、表之間具有復(fù)雜的關(guān)聯(lián)映射關(guān)系,且業(yè)務(wù)功能也相對(duì)完善的HRM人事管理系統(tǒng)案例,希望讓讀者理論聯(lián)系實(shí)際,將這兩個(gè)框架真正運(yùn)用到實(shí)際開(kāi)發(fā)當(dāng)中去。該案例采用目前流行、規(guī)范的Java EE架構(gòu),整個(gè)應(yīng)用分為DAO持久層、領(lǐng)域?qū)ο髮、業(yè)務(wù)邏輯層、控制器層和視圖層,各層之間分層清晰,層與層之間以松耦合的方法組織在一起。
所有代碼完全基于Eclipse IDE來(lái)完成,一步步帶領(lǐng)讀者深入兩個(gè)框架的核心。
適讀人群 :本書適合有較好的Java編程基礎(chǔ),JSP、Servlet、JDBC基礎(chǔ),Spring框架基礎(chǔ)的讀者,尤其適合于對(duì)Spring MVC和MyBatis了解不夠深入,或?qū)pring MVC+MyBatis整合開(kāi)發(fā)不太熟悉的開(kāi)發(fā)人員閱讀。
1. 基于Spring MVC 5+MyBatis 3.4.5全新升級(jí)。
2. 提供配套代碼及微信、QQ群答疑服務(wù)。
3.貼近實(shí)際項(xiàng)目,以案例驅(qū)動(dòng)
本書針對(duì)每一個(gè)知識(shí)點(diǎn)都通過(guò)相應(yīng)的程序給出了示范,所有應(yīng)用范例都密切契合企業(yè)開(kāi)發(fā)實(shí)際場(chǎng)景,例如用戶權(quán)限驗(yàn)證、文件上傳下載等都是企業(yè)開(kāi)發(fā)實(shí)際功能,同時(shí)采用了目前企業(yè)流行、規(guī)范的開(kāi)發(fā)架構(gòu),嚴(yán)格遵守Java EE開(kāi)發(fā)規(guī)范。讀者參考本書的架構(gòu),完全可以身臨其境地感受企業(yè)實(shí)際項(xiàng)目開(kāi)發(fā)。
4.內(nèi)容深入,講解細(xì)致
本書的特點(diǎn)是操作步驟詳細(xì),編程思路清晰,語(yǔ)言平實(shí)易懂。只要讀者認(rèn)真閱讀本書,并掌握書中知識(shí),那么就完全可以勝任企業(yè)中Spring MVC+MyBatis項(xiàng)目開(kāi)發(fā)的要求。
時(shí)至今日,以Spring為核心的輕量級(jí)Java EE企業(yè)開(kāi)發(fā)平臺(tái)在企業(yè)開(kāi)發(fā)中占有絕對(duì)的優(yōu)勢(shì),Java EE應(yīng)用以其穩(wěn)定的性能、良好的開(kāi)放性以及嚴(yán)格的安全性,深受企業(yè)應(yīng)用開(kāi)發(fā)者的青睞,應(yīng)用的性能、穩(wěn)定性都有很好的保證。
輕量級(jí)Java EE開(kāi)發(fā)大致可分為兩種方式:以Struts+Spring+Hibernate三大框架為核心的輕量級(jí)Java EE和以Spring MVC+MyBatis為核心的輕量級(jí)Java EE。這兩種組合都在保留經(jīng)典Java EE應(yīng)用架構(gòu)、高度可擴(kuò)展性、高度可維護(hù)性的基礎(chǔ)上,降低了Java EE應(yīng)用的開(kāi)發(fā)、部署成本,對(duì)于大部分中小型企業(yè)應(yīng)用來(lái)說(shuō)是首選。
本書重點(diǎn)介紹以Spring MVC+MyBatis為核心的輕量級(jí)Java EE。本書采用Tomcat 8作為Web服務(wù)器,Eclipse IDE作為開(kāi)發(fā)工具,詳細(xì)介紹了Spring MVC和MyBatis框架。Spring MVC的配置全部使用注解方式,不再采用舊版本中傳統(tǒng)的XML配置方式;MyBatis則基于企業(yè)開(kāi)發(fā)實(shí)際情況,首先介紹了傳統(tǒng)的XML持久化映射,之后又介紹了升級(jí)的注解持久化映射。
隨著Spring的不斷發(fā)展,Spring MVC已有取代Struts的能力,而MyBatis相對(duì)Hibernate而言則更為輕便、簡(jiǎn)單,越來(lái)越多的公司選擇使用Spring MVC+MyBatis的輕量級(jí)框架組合來(lái)開(kāi)發(fā)Java EE項(xiàng)目,因此掌握Spring MVC+MyBatis技術(shù)將為Java開(kāi)發(fā)者帶來(lái)更多的就業(yè)機(jī)會(huì)與競(jìng)爭(zhēng)力。
本書有什么特點(diǎn)
本書是一本介紹Spring MVC+MyBatis技術(shù)以及兩者整合的實(shí)用圖書,全面介紹了最新的Spring MVC和MyBatis各方面的知識(shí)。
本書針對(duì)每一個(gè)知識(shí)點(diǎn)都通過(guò)相應(yīng)的程序給出了示范,第13章的實(shí)戰(zhàn)項(xiàng)目“HRM人事管理系統(tǒng)”采用目前最流行、最規(guī)范的Java EE架構(gòu),整個(gè)應(yīng)用分為DAO持久層、領(lǐng)域?qū)ο髮、業(yè)務(wù)邏輯層、控制器層和視圖層,各層之間分層清晰,層與層之間以松耦合的方式組織在一起。筆者既擔(dān)任過(guò)軟件開(kāi)發(fā)的技術(shù)經(jīng)理,也擔(dān)任過(guò)軟件公司的培訓(xùn)導(dǎo)師,現(xiàn)如今從事專業(yè)、高端的職業(yè)技術(shù)培訓(xùn)。本書所有應(yīng)用范例都密切契合企業(yè)開(kāi)發(fā)實(shí)際場(chǎng)景,例如用戶權(quán)限驗(yàn)證、文件上傳下載等都是企業(yè)開(kāi)發(fā)中要實(shí)現(xiàn)的實(shí)際功能,同時(shí)采用目前企業(yè)中頗為流行、規(guī)范的開(kāi)發(fā)架構(gòu),嚴(yán)格遵守Java EE開(kāi)發(fā)規(guī)范。讀者參考本書的架構(gòu),完全可以身臨其境地感受企業(yè)實(shí)際項(xiàng)目開(kāi)發(fā)。
本書并不是一本關(guān)于所謂“思想”的書,也沒(méi)有一堆“深?yuàn)W”的新名詞和“高深”的理論,只是讓讀者學(xué)會(huì)實(shí)際的Spring MVC和MyBatis技術(shù)。本書的特點(diǎn)是操作步驟詳細(xì),編程思路清晰,語(yǔ)言平實(shí)易懂。只要讀者認(rèn)真閱讀本書,并掌握書中知識(shí),那么就完全可以勝任企業(yè)中的Spring MVC+MyBatis項(xiàng)目開(kāi)發(fā)。
閱讀本書需要具備一定的計(jì)算機(jī)知識(shí)以及編程功底。熟練掌握J(rèn)ava語(yǔ)言和Spring框架的IOC、AOP和持久層的ORM設(shè)計(jì)模式等知識(shí)對(duì)于學(xué)習(xí)本書是很有必要的。
可訪問(wèn)www.crazyit.org或www.broadview.com.cn/33780下載本書配套資源。
本書寫給誰(shuí)看
如果你已經(jīng)掌握了Java SE的內(nèi)容,或已經(jīng)學(xué)完了瘋狂軟件教育的《瘋狂Java講義》一書,那么你非常適合閱讀此書。除此之外,如果你已有初步的JSP、Servlet、JDBC基礎(chǔ),甚至對(duì)Spring、MyBatis等框架有所了解,但希望掌握它們?cè)趯?shí)際開(kāi)發(fā)中的應(yīng)用,本書也非常適合你。如果你對(duì)Java的掌握還不熟練,則建議遵從學(xué)習(xí)規(guī)律,循序漸進(jìn),暫時(shí)不要購(gòu)買、閱讀此書,而是按照“瘋狂Java學(xué)習(xí)路線圖”中的建議順序?qū)W習(xí)。
衷心感謝
衷心感謝李剛老師,他是筆者非常好的朋友,在本書的創(chuàng)作過(guò)程中,他提供了大量切實(shí)、有用的幫助。同時(shí)衷心感謝瘋狂軟件教育中心所有同事提供的幫助。
感謝我的妻子王丹娜女士,她給了我生活上、精神上無(wú)微不至的關(guān)懷和照顧,并承擔(dān)幾乎所有的日常家務(wù),使我能夠心無(wú)旁騖地專注于程序的研究和書籍的撰寫。
感謝所有參加瘋狂軟件實(shí)訓(xùn)的學(xué)生,他們?cè)趯?shí)際工作場(chǎng)景的應(yīng)用中證明了本書的價(jià)值,他們的反饋?zhàn)尡緯訉?shí)用。
肖文吉
瘋狂軟件,多年來(lái)從事Java開(kāi)發(fā)、移動(dòng)開(kāi)發(fā)等方面的培訓(xùn)及研發(fā)工作,承接大型研發(fā)項(xiàng)目。瘋狂軟件是廣州為學(xué)教育科技有限公司的教育品牌,立志以務(wù)實(shí)的技術(shù)來(lái)改變中國(guó)的軟件教育,所培訓(xùn)的學(xué)生入職華為、阿里軟件、唯品會(huì)、網(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)勢(shì) 4
1.2 輕量級(jí)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 使用開(kāi)源框架的好處 7
1.3 本章小結(jié) 7
第2章 Spring MVC簡(jiǎn)介 8
2.1 MVC思想概述 9
2.1.1 傳統(tǒng)Model1和Model2 9
2.1.2 MVC思想及其優(yōu)勢(shì) 10
2.2 Struts 2和Spring MVC 11
2.2.1 Spring MVC的優(yōu)勢(shì) 11
2.2.2 Spring MVC和Struts 2的區(qū)別 11
2.3 開(kāi)發(fā)第一個(gè)Spring MVC應(yīng)用 12
2.3.1 Spring的下載和安裝 12
2.3.2 Spring MVC的DispatcherServlet 13
2.3.3 基于Controller接口的控制器 14
示例:第一個(gè)Spring MVC應(yīng)用 14
示例:基于注解的控制器 18
2.4 詳解DispatcherServlet 20
2.5 Spring MVC執(zhí)行的流程 22
2.5.1 Spring MVC應(yīng)用的開(kāi)發(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注解簡(jiǎn)介 29
3.2.2 請(qǐng)求處理方法中可出現(xiàn)的參數(shù)類型 32
3.2.3 請(qǐng)求處理方法可返回的類型 33
3.2.4 Model和ModelMap 33
示例:Model和ModelMap的使用 34
3.2.5 ModelAndView 35
示例:ModelAndView的使用 35
3.2.6 頁(yè)面轉(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)簽庫(kù) 93
4.1 表單標(biāo)簽庫(kù) 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的國(guó)際化 117
5.1 Spring MVC國(guó)際化的相關(guān)知識(shí) 118
5.1.1 messageSource接口 118
5.1.2 localeResolver接口 118
5.1.3 message標(biāo)簽 119
5.2 Spring MVC的國(guó)際化處理 119
5.2.1 AcceptHeaderLocaleResolver 119
示例:基于瀏覽器請(qǐng)求的國(guó)際化實(shí)現(xiàn) 119
5.2.2 SessionLocaleResolver 122
示例:基于HttpSession的國(guó)際化實(shí)現(xiàn) 123
5.2.3 CookieLocaleResolver 125
示例:基于Cookie的國(guó)際化實(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注冊(cè)全局自定義編輯器轉(zhuǎn)換數(shù)據(jù) 135
6.2.3 多種轉(zhuǎn)換器的優(yōu)先順序 135
6.3 數(shù)據(jù)格式化 136
示例:使用Formatter格式化數(shù)據(jù) 137
示例:使用FormatterRegistrar注冊(cè)Formatter 138
示例:使用AnnotationFormatterFactory <A extends Annotation>格式化數(shù)據(jù) 139
6.4 數(shù)據(jù)校驗(yàn) 142
6.4.1 Spring的Validation校驗(yàn)框架 143
示例:測(cè)試Spring的Validation校驗(yàn) 143
6.4.2 JSR 303校驗(yàn) 146
示例:測(cè)試JSR 303校驗(yàn) 147
6.5 本章小結(jié) 152
第7章 Spring MVC的文件上傳下載和攔截器機(jī)制 153
7.1 文件上傳 154
示例:Spring MVC的文件上傳 154
示例:使用對(duì)象接收上傳文件 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簡(jiǎn)介 165
8.1 ORM和MyBatis 166
8.1.1 對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射(ORM) 166
8.1.2 基本映射方式 167
8.1.3 流行的ORM框架簡(jiǎn)介 168
8.1.4 MyBatis概述 168
8.2 MyBatis入門 169
8.2.1 MyBatis下載和安裝 169
示例:MyBatis的數(shù)據(jù)庫(kù)操作入門 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對(duì)象工廠 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
示例:測(cè)試select、insert、update和delete操作 195
9.4.5 ResultMaps 200
示例:測(cè)試ResultMaps 201
9.5 本章小結(jié) 208
第10章 深入使用MyBatis 209
10.1 MyBatis關(guān)聯(lián)映射 210
10.1.1 一對(duì)一 210
示例:OneToOneTest 210
10.1.2 一對(duì)多 213
示例:OneToManyTest 213
10.1.3 多對(duì)多 218
示例:ManyToManyTest 218
10.2 MyBatis動(dòng)態(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)用存儲(chǔ)過(guò)程 234
示例:MyBatis調(diào)用存儲(chǔ)過(guò)程 235
10.3.1 插入數(shù)據(jù) 235
10.3.2 查詢數(shù)據(jù)返回集合 237
10.3.3 根據(jù)id查詢數(shù)據(jù)返回對(duì)象 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 一級(jí)緩存(SqlSession級(jí)別) 247
示例:OneLevelCacheTest 247
10.5.2 二級(jí)緩存(mapper級(jí)別) 251
示例:TwoLevelCacheTest 251
10.6 本章小結(jié) 254
第11章 MyBatis的注解配置 255
11.1 常用注解 256
11.2 注解的使用 256
示例:測(cè)試select、insert、update和delete操作 257
示例:測(cè)試一對(duì)一關(guān)聯(lián) 262
示例:測(cè)試一對(duì)多關(guān)聯(lián) 263
示例:測(cè)試多對(duì)多關(guān)聯(lián) 265
示例:測(cè)試動(dòng)態(tài)SQL 267
示例:測(cè)試調(diào)用存儲(chǔ)過(guò)程 274
示例:測(cè)試二級(jí)緩存 276
11.3 本章小結(jié) 278
第12章 Spring 5整合MyBatis 3 279
12.1 開(kāi)發(fā)環(huán)境搭建 280
12.2 準(zhǔn)備所需的jar包 280
12.3 準(zhǔn)備數(shù)據(jù)庫(kù)資源 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頁(yè)面 288
12.9 測(cè)試Spring 5整合MyBatis 3 289
12.10 本章小結(jié) 290
第13章 實(shí)戰(zhàn)項(xiàng)目:人事管理系統(tǒng) 291
13.1 項(xiàng)目簡(jiǎn)介及系統(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ù)庫(kù)表 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)簽庫(kù) 360