雜談
很久不更新微博了集嵌,失蹤了很久...究其原因嘛...找到了實習讥电,只不過不是Android的而是Java的女仰,先來說下為什么我不做Android了猜年。原因賊簡單,就三個字疾忍,找不到乔外。首先我得承認我的技術(shù)比較一般吧,不過就我這一般的水平我感覺應(yīng)該能找到的啊锭碳,我比不少人還是要強上一些的袁稽,我就接著找,找啊找擒抛,投出去的簡歷一點回音都沒有推汽,好難受啊,為啥沒回音啊....為啥歧沪?原因更簡單歹撒,現(xiàn)在的安卓項目不多,需要的人本身就不多诊胞,這是一個方面暖夭,另一個方面是正如你所見锹杈,安卓應(yīng)用不難做,需要的人手不多迈着,這個不多是多少呢竭望,一個公司大概就需要一兩個吧。也就是說你要找Android的工作就是要和精英去比拼裕菠,要花的成本可以說是非常高了咬清,再加上投了那么多天的簡歷對我打擊也不小,于是嘗試去做Java實習奴潘,感覺好找多了旧烧,有不少公司肯要我呢...只不過實習時間比較長,半年起步吧...一開始我只是想找暑假實習而已啊画髓,于是我就和HR交流掘剪,通過和HR的交流我了解到2,3個月的實習你學不到什么奈虾,就算你學到了夺谁,做2,3個月你就跑了愚墓,那公司的利益誰來保證呢予权。我一想昂勉,是這么個道理浪册,那我就做個久一點的實習吧....進了公司不可能直接讓你進公司的項目組,直接進了那就有鬼了岗照。公司項目究竟用的什么框架村象,先不告訴你,先讓你做個SSM的項目(Java框架就這么幾種攒至,你猜吧厚者,我就是不告訴你),我也不想那么多了迫吐,我就跟著做库菲,感覺十分不得勁,于是我就自己也做了一個SSM志膀,我打算總結(jié)一下熙宇。廢話說得夠多的了,接下來我們進入正題
正題
首先要了解一個概念溉浙,SSM框架就是Spring+SpringMVC+MyBatis的整合烫止,既然是整合,那么你就應(yīng)該了解一下戳稽,拆分出來的每一項的大致是干什么的馆蠕,先有個概念才好往下走
Spring
Spring是一個開源框架,Spring是于2003?年興起的一個輕量級的Java?開發(fā)框架,它是為了解決企業(yè)應(yīng)用開發(fā)的復雜性而創(chuàng)建的互躬。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情播赁。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)吼渡。從簡單性行拢、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益诞吱。?簡單來說舟奠,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
按照我的經(jīng)驗來看房维,Spring他就是一個容器沼瘫,你按照一定的規(guī)則,將數(shù)據(jù)庫的一系列接口都放進去咙俩,填充這個容器耿戚。你可以把Spring看成是這個裝切片面包的包裝袋,把這些切片面包整合在一起阿趁,等你想要使用Spring里的數(shù)據(jù)庫接口時膜蛔,那你就打開包裝袋,取出你需要的那塊面包脖阵,而那塊面包就是你需要的接口
SpringMVC
Spring?MVC屬于SpringFrameWork的后續(xù)產(chǎn)品皂股,已經(jīng)融合在Spring?Web?Flow里面。Spring?MVC?分離了控制器命黔、模型對象呜呐、分派器以及處理程序?qū)ο蟮慕巧@種分離讓它們更容易進行定制悍募。
就是使用SpringMVC的規(guī)則分配MVC定血,相當于SpringMVC幫你封裝好了一系列方法蜻拨,免去了你自己去封裝的時間,提高了效率
具體的SpringMVC流程可以看這一篇:SpringMVC流程
MyBatis
?MyBatis?本是apache的一個開源項目iBatis,?2010年這個項目由apache?software?foundation?遷移到了google?code,并且改名為MyBatis?正什。MyBatis是一個基于Java的持久層框架委煤。iBATIS提供的持久層框架包括SQL?Maps和Data?Access?Objects(DAO)MyBatis?消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索珠洗。MyBatis?使用簡單的?XML或注解用于配置和原始映射坡倔,將接口和?Java POJOs(Plain?Old?Java?Objects,普通的?Java對象)映射成數(shù)據(jù)庫中的記錄
簡單來說嘛颠通,就是MyBatis是用來處理數(shù)據(jù)庫這部分的框架址晕,不再使用jdbc的復雜操作,而是使用XML和注解將接口和?Java POJOs(按我的理解POJO就是數(shù)據(jù)實體類)映射成數(shù)據(jù)庫中的記錄顿锰。類似于Android的關(guān)系映射模型谨垃,非常好理解
對這三個東西有了一定的了解后启搂,我們來看看具體的搭建吧
SSM框架的搭建
SSM項目通常使用Maven來進行整合,那我們就來創(chuàng)建一個Maven工程
點擊finish完成創(chuàng)建刘陶,創(chuàng)建后你就會發(fā)現(xiàn)webapp下竟然什么都沒有胳赌,什么都沒有tomcat怎么跑的起來?教你個技巧匙隔,右鍵點擊項目疑苫,點擊最下面的那個properties,在左邊框框里選擇project face纷责,把Dynamic Web Module上鉤去掉捍掺,再選上,他在底部就會顯示一行further configuration available再膳,你將WebContent改成src/main/webapp挺勿,ok,是不是發(fā)現(xiàn)webapp下有東西了喂柒,那么一個maven項目就建好了不瓶。但是仍然有配置需要你更改,比如創(chuàng)建出來的項目默認支持JDK1.5灾杰,你要改一下蚊丐,改成1.7以上的版本,怎么改版本我就不多說了艳吠,網(wǎng)上多的是教程麦备。還有就是你需要更改一下maven的setting文件,點擊window下的preference讲竿,找到Maven泥兰,他下面有一個setting弄屡,根據(jù)他給你的地址找到這個這個文件题禀,并用文本編輯器(比如notepad++)打開它,找到mirrors并添加下面這段話膀捷,這段話的意思就是讓你采用阿里云鏡像迈嘹,用了之后你以后添加jar包啊什么的下載速度嗖嗖的,畢竟是國內(nèi)大公司的鏡像全庸,確實不錯
還有一個配置是將你所擁有的JDK信息按照這個格式也加入setting文件中秀仲,配置好這些東西后,這已經(jīng)是一個可以用的Maven項目了壶笼。好神僵,那我們接著往下走
接下來,你將體會到Maven的優(yōu)勢覆劈,就和Android的引入框架一樣保礼,操作簡單還非常好用
這個就是引入jar包的過程沛励,有兩點要說的,第一個你的dependency要寫在dependencies中炮障,第二個你的dependency是哪來的目派?一個一個手敲得累死你,復制別人博客上的胁赢?確實是一種好方法企蹭,但是別人博客上的又是從哪來的呢?我告訴你是從哪來的啊智末,給你開啟新世界的大門谅摄。
打開百度搜索mvn repository,點擊第一個系馆,在搜索框中你就可以搜到你想要的所有東西螟凭!比如說我要找spring webmvc
點擊其中的一個版本
沒錯,就是這么簡單它呀,接下來你要依次將spring webmvc螺男,spring jdbc,spring aspect(這幾個東西版本要對應(yīng))mybatis纵穿,mybatis Spring(mybatis和spring的適配包)下隧,c3p0,mysql(oracle的驅(qū)動有點特殊谓媒,需要導本地的)淆院,jstl,servlet-api(這個需要給scope屬性加provided)句惯,junit的配置信息添加進pom文件中
接下來是重頭戲土辩,要說web.xml,spring抢野,spring-mvc拷淘,mybatis
首先是web.xml(配置Spring,SpringMVC指孤,字符編碼過濾器)
關(guān)鍵是applicationContext.xml的這個路徑他是在 項目名/src/main/resources下的启涯,不要搞錯位置也不要弄錯名字,不讓名字錯的最好方法就是復制粘貼
接下來恃轩,你需要在web.xml同級目錄下創(chuàng)建Spring的配置文件结洼,名字是當前servlet(dispatcher)-servlet.xml
配置字符串編碼過濾器,這個沒什么好說的叉跛,照著做就行
這個可有可無松忍,這個的作用是如果你使用Rest風格的URI請求,就將普通請求轉(zhuǎn)化為delete或者put
接下來是SpringMVC(只掃描控制器筷厘,配置視圖解析器鸣峭,必備的兩個配置)
需要use-default-filters="false"來解除默認的掃描方法伟桅,讓他只掃描Controller
配置視圖解析器,路徑是/WEB-INF/view/叽掘,類型是.jsp楣铁,這路徑的看你怎么定義了,像我這樣的應(yīng)該比較常見
這兩條語句是必備的更扁,不寫的話很多功能都會出錯
接下來是Spring(配置數(shù)據(jù)源盖腕,與mybatis整合,事務(wù)控制)
這里使用了c3p0浓镜,并給這個bean設(shè)置了id溃列,這里的value值都是取自src/main/resources下的jdbc.properties,千萬不要放錯了膛薛,第一個紅色代表你的SID(數(shù)據(jù)庫連接名)听隐,第二第三表示用戶名和密碼
這里是Spring和Mybatis的整合,創(chuàng)建一個bean哄啄,他的class是SqlSessionFactoryBean雅任,這步很關(guān)鍵務(wù)必要配好,不然可能會出現(xiàn)各種各樣稀奇古怪的錯誤咨跌。在src/main/resources下配置mybatis-config.xml沪么,mybatis-config.xml是一會要說的mybatis的配置文件。還要配數(shù)據(jù)源dataSource锌半,這里用的是上面c3p0的id禽车。最后配mapperLocations,他的路徑是src/main/resources/mapper下的所有xml文件刊殉,你千萬不能填錯殉摔,特別是用了自動生成mapper和實體類的工具的時候,他會在src/main/java下生成一個mapper文件夾记焊,我曾經(jīng)就把這個空文件夾的地址放入其中逸月,把自己搞得焦頭爛額
配置掃描器將所有的dao包下的接口添入spring容器中,這個的話你只要注意他的name和value就好亚亲,這個value你就復制(ctrl+c)一下自己的包再粘貼過來
這里是配置事務(wù)控制彻采,首先要獲取數(shù)據(jù)源,我獲取的是我自己配上的c3p0捌归,其中execution(* com.crud.service..*(..))這個你需要了解一下。execution是切入點指示符岭粤,是必須要有的東西惜索,com.crud.service表示你的切入點是在這個service包下,這個".."表示就算是這個包下的子包也配置了事務(wù)控制剃浇,"*"表示所有的內(nèi)容巾兆,"(..)"表示任意參數(shù)
這里是配置事務(wù)增強猎物,以get開頭的所有方法都會得到一定的優(yōu)化,增強需要在advisor中引入角塑,還有就是事務(wù)控制id的要和事務(wù)增強的id一致蔫磨,方便控制事務(wù)的細節(jié)
這是最后一個,Mybatis(一些設(shè)置圃伶,起個別名)
還記不記得我們在Spring中配置了一個mybatis-config.xml堤如?我們就在這個文件下配置我們的Mybatis,那么怎么配呢窒朋?我們來看看官網(wǎng)吧搀罢,在百度中搜索mybatis,打開第一個網(wǎng)頁侥猩,你可以看到一個忍者鳥
點擊"getting start"榔至,把框起來的這部分復制到mybatis-config.xml,你可能會好奇這個東西是什么欺劳?為什么需要他唧取?沒有他又會怎么樣?
划提!DOCTYPE是一種標準通用標記語言的文檔類型聲明兵怯,它的目的是要告訴標準通用標記語言解析器,它應(yīng)該使用什么樣的文檔類型定義(DTD)來解析文檔腔剂。你可以簡單理解為mybatis規(guī)定了一定的規(guī)則讓你來寫這個配置文件媒区,把他加入mybatis后你就可以自動補全出configuration等配置標簽,沒有這個規(guī)則那些配置標簽肯定還是能生效掸犬,因為你已經(jīng)在maven中已經(jīng)添加了mybatis的jar包袜漩,但是你一個一個的手打標簽效率就很低了
在configuration中加入setting設(shè)置,這個的意思就是讓你的命名遵守駝峰規(guī)則湾碎,駝峰規(guī)則你要是不知道就百度一下吧宙攻,setting肯定也不止這么一個,你可以點開Configuration XML介褥,他這里有個setting
你點進這個setting之后你就可以看到各種各樣的設(shè)置座掘,這個就根據(jù)你項目的需求來定了
你還可以設(shè)置一下類型別名,方便我們引用
至此柔滔,一個SSM項目的整合已經(jīng)完成了溢陪!我再加一點額外知識,關(guān)于MyBatis的逆向工程睛廊,逆向工程聽著高大上形真,其實就是根據(jù)你的數(shù)據(jù)庫里的表生成對應(yīng)的實體類以及mapper(數(shù)據(jù)庫層面的具體操作,例如增刪改查)超全,所需道具就是MyBatis Generator
MyBatis Generator
百度搜索MyBatis Generator咆霜,打開他邓馒,看一下
你會發(fā)現(xiàn)這個界面和MyBatis的一樣,其實我就是懶得在官網(wǎng)里點而已....好的蛾坯,我們點一下Running MyBatis Generator With Maven光酣,開啟我們的逆向工程
因為我們使用了Maven,我可以用Maven來導入他脉课,去Maven Repository救军,搜索MyBatis Generator,找個最新的版本添加進pom.xml中
選擇這一項下翎,你就會看到一個例子缤言,在項目的根目錄下創(chuàng)建一個mbg.xml,將他復制進來视事,復制進來以后你要將示例改為你自己的設(shè)置
將數(shù)據(jù)庫連接信息改為自己的
將實體類的信息配上胆萧,自己的包名和地址,到時候它自動生成的實體類就放在這個包下
設(shè)置好你要生成的mapper要放在哪俐东,也是更改包名和地址
設(shè)置好你要生成的dao他放在那跌穗,依舊是更改包名和地址
最后這個tableName是數(shù)據(jù)庫的表名(數(shù)據(jù)庫里表名是什么你就是什么,一字不要差)虏辫,domainObjectName是實體類的名字(自己取名蚌吸,最后別取的和數(shù)據(jù)庫的表名一模一樣,出錯了也不好分辨)
最后就是試一試能否自動生成砌庄,這五種方法都可以運行MBG羹唠,你是用哪一種都沒有問題,反正他都有例子
反正我用的Java代碼的方式娄昆,你在寫java的地方創(chuàng)建一個類佩微,給他一個主函數(shù),把List那一長串放進去萌焰,導包哺眯,把new File("generatorConfig.xml");里的xml改成你自己創(chuàng)建的mbg.xml,右鍵點擊main扒俯,點擊Run as再點擊Java Application奶卓,然后刷新一下項目,你的項目下就會多了很多自動生成的代碼
久了不用MBG還填這么復雜的包名很容易出錯撼玄,我的辦法是就建在不重要的根目錄(比如maven的target目錄)下夺姑,等東西建好了再把他們移到對應(yīng)的包下即可,雖然拖來拖去麻煩點互纯,但是不會報錯瑟幕,報錯還要思考,做事不動腦才是最開心的
總結(jié)
寫到這里留潦,我就把SSM的整合詳細走了一遍只盹,鑒于我懶得學不會用Markdown文法,沒有辦法把代碼放進一個框里兔院,如果你要是按照我的做法來搭框架可能會很煩殖卑,畢竟你是一行一行手敲嘛,但是你的理解也會比別人的深坊萝,成就感也會比別人大孵稽,也不是特別虧吧...如果你發(fā)現(xiàn)我說的有什么不對的,歡迎指教十偶!我們一起討論菩鲜,一起進步!