javascript
Spring MVC+ Spring + Mybatis “三大框架”介绍
為什么要使用框架?
對于絕大部分 JavaWeb 開發(fā)者來說,開發(fā)的第一個項目應(yīng)該都是以 JSP 或者 JSP+Servlet 形式完成的項目,之后陸陸續(xù)續(xù)、大大小小的項目應(yīng)該也是以此為基礎(chǔ)進行開發(fā),當(dāng)你看到你一個個完美的作品竣工完結(jié)之時,心滿意足之余你可能會有這樣一種疑惑,明明使用 JSP+Servlet 技術(shù)就可以完成的項目為什么要使用各種框架?
首先,這些項目只是學(xué)習(xí)過程中的練習(xí)項目,其次,這些項目是個人項目并不是企業(yè)應(yīng)用,學(xué)習(xí) JavaWeb 開發(fā)的目的是企業(yè)級應(yīng)用的開發(fā),閉門造車的思維模式不可取。一個中小型項目全部使用 JSP+Servlet 進行開發(fā)和維護,其成本就會很高,更不用說大型項目了,那簡直就是一個災(zāi)難,開發(fā)成本、迭代成本、維護成本將會更高。真實的企業(yè)應(yīng)用開發(fā)有幾個比較重要的關(guān)注點分別是:代碼復(fù)用、標(biāo)準(zhǔn)化、可維護性、開發(fā)成本,JSP+Servlet的封裝和抽象程度與框架相比起來就毫無優(yōu)勢可言了。
-
代碼復(fù)用:框架的封裝和抽象程度較高,企業(yè)開發(fā)中的很多功能都做了相應(yīng)的實現(xiàn),例如 JDBC、請求分發(fā)、對象管理、事務(wù)管理等底層代碼,如果不使用框架而選擇自己開發(fā)的話,代碼量著實不小,框架的使用為開發(fā)人員減少了大部分的編碼工作,提升開發(fā)效率。
-
標(biāo)準(zhǔn)化:對于上述的功能,如果沒有使用框架,每個企業(yè)應(yīng)該肯定會有自己的封裝。各企業(yè)封裝的思路不同及業(yè)務(wù)場景的不同也會導(dǎo)致或大或小的差異性,這將給員工帶來比較大的學(xué)習(xí)成本。從一家公司換到另外一家公司,需要重新學(xué)習(xí)使用公司內(nèi)部的框架,這種做法往往會加大學(xué)習(xí)成本。而使用框架,上述的問題將不復(fù)存在,大部分公司都在用這套框架和這套框架下的開發(fā)模式,最終產(chǎn)生一個大家都接受的標(biāo)準(zhǔn)化流程,框架實際上也是一種規(guī)范,可以讓每位開發(fā)人員保持類似的開發(fā)風(fēng)格和開發(fā)方式。
-
可維護性:代碼復(fù)用程度高、開發(fā)流程的規(guī)范化和標(biāo)準(zhǔn)化帶來的就是開發(fā)效率的提升;框架的引入也使得代碼分層更加清晰,底層技術(shù)細節(jié)的封裝,使得開發(fā)人員的關(guān)注點更加傾向于具體業(yè)務(wù)上;這些原因會使得企業(yè)應(yīng)用擁有更優(yōu)秀的可維護性。
其實,說得簡單點,當(dāng)優(yōu)秀的框架逐漸成為趨勢、成為標(biāo)準(zhǔn)之時,開發(fā)者的學(xué)習(xí)成本降低了,同時也減少了開發(fā)者的重復(fù)編碼工作,簡化開發(fā),加快開發(fā)進度,降低維護難度。
“三大框架”
談到框架之時,我相信你的腦海中會迅速出現(xiàn)一個詞語——“三大框架”,每個 JavaWeb 學(xué)習(xí)者對該詞肯定都印象深刻。開始接觸 Java 開發(fā)框架時,這個詞語也就隨之深刻在腦海中,因為周圍的開發(fā)者乃至自己都會時常提到它。
“三大框架”已成為大家接受的叫法,在進入公司后,隨著開發(fā)經(jīng)驗的增長,“三大框架”被提到得越來越少了。伴隨著可使用的優(yōu)秀框架越來越多,已經(jīng)不止是“三大框架”了。“三大框架”的每一種技術(shù),雖然是獨立的技術(shù),用于企業(yè)級應(yīng)用開發(fā)時又是緊密結(jié)合在一起,并不孤立,“三大框架”主要用來開發(fā) Web 應(yīng)用,分別負責(zé) MVC 開發(fā)模式下的不同模塊功能。
這個詞語所代表的含義也不是固定的,我初學(xué) JavaWeb 開發(fā)時,“三大框架”代表的是 SSH(即 Spring、Struts2、Hibernate),而在今天,“三大框架”已經(jīng)逐漸過渡成為 SSM(即 Spring、SpringMVC、MyBatis),本課程選擇的技術(shù)即為 Spring+SpringMVC+MyBatis。
狀態(tài)火熱的 SSM 技術(shù)棧
我們可以登錄幾大招聘網(wǎng)招,看看企業(yè) JavaWeb 相關(guān)崗位的招聘文案,通過招聘信息中的要求得出以下結(jié)論:
SSM 這套技術(shù)棧是絕大部分公司明確要求掌握的技術(shù),而 SSM 的組合搭配已經(jīng)漸漸成為 JavaWeb 開發(fā)者必備的技能,雖然不是全部,但仍是目前的主要趨勢,掌握 SSM 技能棧刻不容緩。
由此可以看出 SpringMVC+Spring+Mybatis 技術(shù)棧有著很高的受歡迎程度!那么,SpringMVC+Spring+Mybatis 到底有多么火熱呢?我找出了一些數(shù)據(jù)給大家展示一下。
此圖來自于百度指數(shù),我在2018年6月14日查詢了 SSM 關(guān)鍵詞的數(shù)據(jù),從圖中可知,自百度指數(shù)有數(shù)據(jù)統(tǒng)計以來,SpringMVC+Spring+Mybatis 的搜索指數(shù)一直很高,自2011年至2018年也一直呈現(xiàn)連年穩(wěn)定增長的趨勢,近四年的搜索指數(shù)也一直保持在一個極高的水平上。
也找了其他幾組數(shù)據(jù)進行對比:
以上兩張圖片同樣來自于百度指數(shù),分別為近幾年比較火熱的技術(shù)和話題:大數(shù)據(jù)、Docker 技術(shù),這兩個詞語的火熱程度應(yīng)該不用我多說,唯有炙手可熱來描述了。三張圖片結(jié)合觀察,同大數(shù)據(jù)和 Docker 相比起來,SSM 也絲毫不落下風(fēng)!十分穩(wěn)定的保持在一個極高的水準(zhǔn)之上。
一直增長、搜索指數(shù)數(shù)值極高、且極其穩(wěn)定,這些狀態(tài)加在一起,如果要找一個合適的詞語來形容的話,那就只能是恐怖了!一時風(fēng)頭無兩的 SSM 技術(shù)棧!?我近兩年也一直在做關(guān)于 Spring+SpringMVC+MyBatis 的技術(shù)文章分享,因此本達人課選擇的主要技術(shù)棧仍為 Spring+SpringMVC+MyBatis,下面將分別對其進行介紹。
Spring
Spring 是一個輕量級的企業(yè)級應(yīng)用開發(fā)框架,于2004年由 Rod Johnson 發(fā)布了1.0 版本,經(jīng)過多年的更新迭代,已經(jīng)逐漸成為 Java 開源世界的第一框架,Spring 框架號稱 Java EE 應(yīng)用的一站式解決方案,與各個優(yōu)秀的 MVC 框架如 SpringMVC、Struts2、JSF 等可以無縫整合,與各個 ORM 框架如 Hibernate、MyBatis、JPA 等也可以無縫銜接,其他各種技術(shù)也因為 Spring 的存在而被很容易地整合進項目開發(fā)之中,如 Redis 整合、Log4J 整合、ElasticSearch 整合、RabbitMQ 整合、Quartz 整合、Thymeleaf 整合等等,只要你開發(fā)中需要使用到的技術(shù),Spring 都提供了極好的封裝和整合體驗,這也是為何 Spring 生命力如此強大的原因,暫時還沒有能夠替代 Spring 的框架出現(xiàn)。
Spring 框架提供約20個模塊,如下圖:
Spring 框架并不強制應(yīng)用完全依賴于 Spring,開發(fā)者可自由選擇需要的模塊。
總結(jié)起來,Spring 框架有如下優(yōu)點:
- Spring 的 IOC 容器將對象之間的依賴關(guān)系交由 Spring 控制,提高了組件之間的解耦,簡化 Java 開發(fā);
- 面向切面編程,Spring AOP 是面向?qū)ο缶幊?#xff08;OOP)的一種補充,通過這種方式將系統(tǒng)中的一些通用任務(wù)提取出來進行單獨處理,比如事務(wù)處理、日志模塊、權(quán)限控制、性能監(jiān)控等,避免大量的代碼重復(fù),使得代碼更加簡潔,復(fù)用性更強,也幫助開發(fā)人員更加關(guān)注業(yè)務(wù)邏輯;
- 非侵入式,代碼的污染極低;
- 無與倫比的兼容性,與其他優(yōu)秀的第三方框架無縫整合;
- Spring 框架的源碼是無與倫比的 Java 代碼盛宴;
- 高度的開放性;
- 開源社區(qū)十分活躍,文檔齊全,學(xué)習(xí)成本不高。
SpringMVC
SpringMVC 是 Spring 框架體系中的全功能 MVC 模塊,在前面 Spring 結(jié)構(gòu)圖中可以看到這一關(guān)系,其中的 Web MVC 即 SpringMVC。SpringMVC 是基于 Java 語言實現(xiàn) MVC 設(shè)計模式的請求驅(qū)動類型的輕量級 Web 框架,目的是將 Web 開發(fā)模塊化及代碼簡化。其提供了 DispatcherServlet 前端控制器分派請求,同時提供靈活的配置處理程序映射、視圖解析,并支持文件上傳,目前已經(jīng)是眾多 MVC 框架中的佼佼者。
下圖為 SpringMVC 框架的工作流程圖及注釋:
SpringMVC 框架的優(yōu)點如下:
- Spring 和 SpringMVC 無需復(fù)雜的操作即可整合,天生契合,靈活度高,非侵入性;
- 配置簡單,學(xué)習(xí)成本低;
- 設(shè)計合理,各模塊分工明確,功能強大;
- 非常容易與第三方視圖技術(shù)集成整合;
- 能夠進行 Web 層的單元測試;
- 支持靈活的 URL 到頁面控制器的映射;
- 靈活且強大的數(shù)據(jù)驗證、格式化和數(shù)據(jù)綁定機制;
- 開源社區(qū)十分活躍,文檔齊全。
MyBatis
MyBatis 的前身是 Apache 社區(qū)的一個開源項目 iBatis,于2010年更名為 MyBatis。MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架,避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集,使得開發(fā)人員更加關(guān)注 SQL 本身和業(yè)務(wù)邏輯,不用再去花費時間關(guān)注整個復(fù)雜的 JDBC 操作過程。
以下為 MyBatis 的結(jié)構(gòu)圖:
MyBatis 的優(yōu)點如下:
- 封裝了 JDBC 大部分操作,減少開發(fā)人員工作量;
- 相比一些自動化的 ORM 框架,“半自動化”使得開發(fā)人員可以自由的編寫 SQL 語句,靈活度更高;
- Java 代碼與 SQL 語句分離,降低維護難度;
- 自動映射結(jié)果集,減少重復(fù)的編碼工作;
- 開源社區(qū)十分活躍,文檔齊全,學(xué)習(xí)成本不高。
總結(jié)
由于篇幅有限,本文只簡單介紹了 SSM 技術(shù)棧,后續(xù)文章將專注于實戰(zhàn)教程部分。另外,與 SSH 技術(shù)棧的比較不在本文的討論范圍內(nèi),我認為這種框架之間的對比對于學(xué)習(xí)者來說也只是看個熱鬧,只有真正的使用過才能懂得其中的區(qū)別。同時,我也認為技術(shù)之間沒有高低優(yōu)劣之分,只有適不適合自己,因此就不再花費篇幅去做對比了,有興趣的朋友可以去實際體驗一下再做對比,切不可眼高手低。
我有一個微信公眾號,經(jīng)常會分享一些Java技術(shù)相關(guān)的干貨;如果你喜歡我的分享,可以用微信搜索“Java團長”或者“javatuanzhang”關(guān)注。
總結(jié)
以上是生活随笔為你收集整理的Spring MVC+ Spring + Mybatis “三大框架”介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LintCode 两两交换链表中的节点
- 下一篇: Win10系列:JavaScript页面