一、前言
??在大學(xué)期間Java是一門選修課,而這門課和我想上的幾門大課時(shí)間沖突,這幾年里一直沒有認(rèn)真系統(tǒng)的學(xué)習(xí)過Java,僅僅是用到的時(shí)候會(huì)去翻翻百度看看CSDN等資料網(wǎng)站。現(xiàn)在有工作的需要,也正好開始認(rèn)真學(xué)習(xí)Java開發(fā),這一個(gè)系列就算是學(xué)習(xí)過程中的經(jīng)驗(yàn)總結(jié)和小隨筆,供自己回顧總結(jié)用。
二、SSM是什么
??工作中使用的是Java EE,在各類Java入門教程里都會(huì)提到它和SE版本的區(qū)別在于專為企業(yè)開發(fā)服務(wù)。在我個(gè)人看來,Java EE指的是為了使企業(yè)的開發(fā)產(chǎn)品能夠在統(tǒng)一標(biāo)準(zhǔn)下運(yùn)行,有更好的兼容性,而人為定制的一部分規(guī)范,其特點(diǎn)就是使用各類現(xiàn)有框架和組件進(jìn)行開發(fā)。
SSM(Spring+SpringMVC+Mybatis)框架是目前比較主流的開發(fā)框架之一,在后端開發(fā)上有著相對(duì)穩(wěn)定的地位。接下來的學(xué)習(xí)目標(biāo),就是熟練掌握SSM開發(fā)的技術(shù),并早日開始項(xiàng)目實(shí)戰(zhàn)。
1.Spring
Spring框架是個(gè)很成功的框架,其核心內(nèi)容是IoC(控制反轉(zhuǎn))和AOP(面向切面編程)。IoC的意思是,(用某Collection舉例子)假設(shè)我要實(shí)現(xiàn)一個(gè)功能,需要A和B兩個(gè)對(duì)象共同作用。常規(guī)的new方法可以在實(shí)現(xiàn)功能時(shí)創(chuàng)建需要的對(duì)象,但是如果我給12個(gè)頁面各配一個(gè)該功能,假設(shè)要修改A的定義,就得去對(duì)應(yīng)的實(shí)現(xiàn)中一個(gè)一個(gè)做改動(dòng),非常麻煩。所以我把A和B單獨(dú)抽出來在別的地方給定義,在需要用的時(shí)候自動(dòng)加載進(jìn)去,這過程不用我管理不說,只需要修改定義自動(dòng)裝配也會(huì)產(chǎn)生改變,這就是容器控制進(jìn)行依賴注入,也就是當(dāng)出現(xiàn)依賴時(shí),不讓產(chǎn)生依賴的一方去創(chuàng)建對(duì)應(yīng)的被依賴對(duì)象,而是由容器負(fù)責(zé)提前建立好,需要的時(shí)候分配給它。好處在于低耦合性,也就是減少不同模塊之間的關(guān)聯(lián)緊密程度,這樣需要修改的時(shí)候就可以盡可能的減少修改內(nèi)容(比如僅僅對(duì)配置文件進(jìn)行修改而不是類中的聲明)。
說完IoC再來說說AOP。面向切面編程其實(shí)是一種針對(duì)“后一個(gè)操作可能使得前一個(gè)操作產(chǎn)生其他動(dòng)作但是不確定”情況的設(shè)計(jì)思路,比如數(shù)據(jù)庫中的出錯(cuò)回滾等。舉個(gè)栗子,我今天10次遠(yuǎn)征任務(wù)還差一次,點(diǎn)了3個(gè)長遠(yuǎn)征出去,然后來人告訴我20分鐘后維護(hù),我得取消一個(gè)遠(yuǎn)征換個(gè)短的。如果沒有維護(hù)這件事發(fā)生,我不需要執(zhí)行取消操作,這個(gè)事件就是一個(gè)分界點(diǎn)。AOP就是針對(duì)某些分界點(diǎn)使得事務(wù)流程產(chǎn)生分歧,需要調(diào)整先前產(chǎn)生的事的“針對(duì)多個(gè)對(duì)象”的編程思想,實(shí)際應(yīng)用還是應(yīng)該要等實(shí)戰(zhàn)接觸到。
2.SpringMVC
SpringMVC其實(shí)還是MVC,所謂MVC指的是Model-Viev-Controller結(jié)構(gòu)。Model,對(duì)應(yīng)POJO類,可以對(duì)應(yīng)數(shù)據(jù)庫里一個(gè)表等可操作的對(duì)象,是封裝產(chǎn)生的結(jié)果。View表示的是模型的數(shù)據(jù)可視化,比如取出數(shù)據(jù)輸出到控制臺(tái)etc。Controller負(fù)責(zé)在分開的Model和View之間進(jìn)行控制,實(shí)現(xiàn)修改實(shí)際數(shù)據(jù)和更新View。
SpringMVC是基于Spring框架實(shí)現(xiàn)的,依靠注解可以實(shí)現(xiàn)自動(dòng)掃描裝配,從而減少了代碼量,便于修改的同時(shí)也更加規(guī)范化。
3.Mybatis
Mybatis提供了對(duì)數(shù)據(jù)庫的操作。傳統(tǒng)的JDBC需要在Java類里加入大量規(guī)范性格式的代碼以便解讀插入的SQL語句,簡化了這一流程的就是Mybatis。對(duì)應(yīng)DAO(持久化訪問)層或者M(jìn)apper層,用一個(gè)Mapper.java接口和對(duì)應(yīng)的Mapper.xml去進(jìn)行數(shù)據(jù)庫操作。在接口里聲明操作類,然后在xml中將具體的SQL給出,就可以直接調(diào)用接口里的方法去進(jìn)行數(shù)據(jù)庫增刪查改。使用的時(shí)候需要配置數(shù)據(jù)庫連接文件。
三、項(xiàng)目搭建
1.項(xiàng)目準(zhǔn)備
SSM框架(Springmvc和SpringMybatis可以進(jìn)一步減少配置文件)
Navicat(用于數(shù)據(jù)庫的可視化管理)
Maven 3(用于導(dǎo)入需要的jar,可以將本地jar通過mvn isntall加載到本地倉庫)
Mysql
Tomcat/Resin:前者的錯(cuò)誤信息會(huì)在IDEA里面給出提示,后者會(huì)在web頁面上展示。
2.項(xiàng)目建立
使用空項(xiàng)目——Maven Module——webapp建立,刪除web.xml之外的全部配置文件,配置webapp下的index.jsp作為歡迎頁面。
項(xiàng)目的GroupId為package name,在src下建立Java文件夾,設(shè)置為代碼源,將resource設(shè)置為配置源。(這里有個(gè)問題,我用Java 8產(chǎn)生的配置文件在打包時(shí)會(huì)強(qiáng)行匹配到1.5水平,不知道路徑問題出在哪。)Java下建立對(duì)應(yīng)的包,分為四個(gè)層:Controller,Dao/Mapper,Model,Service。
3.配置文件
配置spring-mvc.xml和spring-mybatis.xml,然后配置jdbc.properties。具體配置等之后單獨(dú)開一篇詳細(xì)注釋一下。