SSM框架的搭建
雜談
很久不更新微博了,失蹤了很久...究其原因嘛...找到了實習,只不過不是Android的而是Java的,先來說下為什麼我不做Android了。原因賊簡單,就三個字, 找不到 。首先我得承認我的技術比較一般吧,不過就我這一般的水平我感覺應該能找到的啊,我比不少人還是要強上一些的,我就接著找,找啊找,投出去的簡歷一點回音都沒有,好難受啊,為啥沒回音啊....為啥?原因更簡單,現在的安卓專案不多,需要的人本身就不多,這是一個方面,另一個方面是正如你所見,安卓應用不難做,需要的人手不多,這個不多是多少呢,一個公司大概就需要一兩個吧。也就是說你要找Android的工作就是要和精英去比拼,要花的成本可以說是非常高了,再加上投了那麼多天的簡歷對我打擊也不小,於是嘗試去做Java實習,感覺好找多了,有不少公司肯要我呢...只不過實習時間比較長,半年起步吧...一開始我只是想找暑假實習而已啊,於是我就和HR交流,通過和HR的交流我瞭解到2,3個月的實習你學不到什麼,就算你學到了,做2,3個月你就跑了,那公司的利益誰來保證呢。我一想,是這麼個道理,那我就做個久一點的實習吧....進了公司不可能直接讓你進公司的專案組,直接進了那就有鬼了。公司專案究竟用的什麼框架,先不告訴你,先讓你做個SSM的專案(Java框架就這麼幾種,你猜吧,我就是不告訴你),我也不想那麼多了,我就跟著做,感覺十分不得勁,於是我就自己也做了一個SSM,我打算總結一下。廢話說得夠多的了,接下來我們進入正題
正題
首先要了解一個概念,SSM框架就是Spring+SpringMVC+MyBatis的整合,既然是整合,那麼你就應該瞭解一下,拆分出來的每一項的大致是幹什麼的,先有個概念才好往下走
Spring
Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,它是為了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。
按照我的經驗來看,Spring他就是一個容器,你按照一定的規則,將資料庫的一系列介面都放進去,填充這個容器。你可以把Spring看成是這個裝切片面包的包裝袋,把這些切片面包整合在一起,等你想要使用Spring裡的資料庫介面時,那你就開啟包裝袋,取出你需要的那塊麵包,而那塊麵包就是你需要的介面

隨便找的切片面包
SpringMVC
Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。Spring MVC 分離了控制器、模型物件、分派器以及處理程式物件的角色,這種分離讓它們更容易進行定製。
就是使用SpringMVC的規則分配MVC,相當於SpringMVC幫你封裝好了一系列方法,免去了你自己去封裝的時間,提高了效率
MyBatis
MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。MyBatis是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始對映,將介面和 Java POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄
簡單來說嘛,就是MyBatis是用來處理資料庫這部分的框架,不再使用jdbc的複雜操作,而是使用XML和註解將介面和 Java POJOs(按我的理解POJO就是資料實體類)對映成資料庫中的記錄。類似於Android的關係對映模型,非常好理解
對這三個東西有了一定的瞭解後,我們來看看具體的搭建吧
SSM框架的搭建
SSM專案通常使用Maven來進行整合,那我們就來建立一個Maven工程


點選finish完成建立,建立後你就會發現webapp下竟然什麼都沒有,什麼都沒有tomcat怎麼跑的起來?教你個技巧,右鍵點選專案,點選最下面的那個properties,在左邊框框裡選擇project face,把Dynamic Web Module上鉤去掉,再選上,他在底部就會顯示一行further configuration available,你將WebContent改成src/main/webapp,ok,是不是發現webapp下有東西了,那麼一個maven專案就建好了。但是仍然有配置需要你更改,比如創建出來的專案預設支援JDK1.5,你要改一下,改成1.7以上的版本,怎麼改版本我就不多說了,網上多的是教程。還有就是你需要更改一下maven的setting檔案,點選window下的preference,找到Maven,他下面有一個setting,根據他給你的地址找到這個這個檔案,並用文字編輯器(比如notepad++)開啟它,找到mirrors並新增下面這段話,這段話的意思就是讓你採用阿里雲映象,用了之後你以後新增jar包啊什麼的下載速度嗖嗖的,畢竟是國內大公司的映象,確實不錯


還有一個配置是將你所擁有的JDK資訊按照這個格式也加入setting檔案中,配置好這些東西后,這已經是一個可以用的Maven專案了。好,那我們接著往下走
接下來,你將體會到Maven的優勢,就和Android的引入框架一樣,操作簡單還非常好用


這個就是引入jar包的過程,有兩點要說的,第一個你的dependency要寫在dependencies中,第二個你的dependency是哪來的?一個一個手敲得累死你,複製別人部落格上的?確實是一種好方法,但是別人部落格上的又是從哪來的呢?我告訴你是從哪來的啊,給你開啟新世界的大門。
開啟百度搜尋mvn repository,點選第一個,在搜尋框中你就可以搜到你想要的所有東西!比如說我要找spring webmvc


點進去後的介面
點選其中的一個版本

沒錯,就是這麼簡單,接下來你要依次將spring webmvc,spring jdbc,spring aspect(這幾個東西版本要對應)mybatis,mybatis Spring(mybatis和spring的適配包),c3p0,mysql(oracle的驅動有點特殊,需要導本地的),jstl,servlet-api(這個需要給scope屬性加provided),junit的配置資訊新增進pom檔案中
接下來是重頭戲,要說web.xml,spring,spring-mvc,mybatis
首先是web.xml(配置Spring,SpringMVC,字元編碼過濾器)

ContextLoaderListener
關鍵是applicationContext.xml的這個路徑他是在 專案名/src/main/resources下的,不要搞錯位置也不要弄錯名字,不讓名字錯的最好方法就是複製貼上

接下來,你需要在web.xml同級目錄下建立Spring的配置檔案,名字是當前servlet(dispatcher)-servlet.xml

配置字串編碼過濾器,這個沒什麼好說的,照著做就行

這個可有可無,這個的作用是如果你使用Rest風格的URI請求,就將普通請求轉化為delete或者put
接下來是SpringMVC(只掃描控制器,配置檢視解析器,必備的兩個配置)

需要use-default-filters="false"來解除預設的掃描方法,讓他只掃描Controller

配置檢視解析器,路徑是/WEB-INF/view/,型別是.jsp,這路徑的看你怎麼定義了,像我這樣的應該比較常見

這兩條語句是必備的,不寫的話很多功能都會出錯
接下來是Spring(配置資料來源,與mybatis整合,事務控制)


這裡使用了c3p0,並給這個bean設定了id,這裡的value值都是取自src/main/resources下的jdbc.properties,千萬不要放錯了,第一個紅色代表你的SID(資料庫連線名),第二第三表示使用者名稱和密碼

這裡是Spring和Mybatis的整合,建立一個bean,他的class是SqlSessionFactoryBean,這步很關鍵務必要配好,不然可能會出現各種各樣稀奇古怪的錯誤。在src/main/resources下配置mybatis-config.xml,mybatis-config.xml是一會要說的mybatis的配置檔案。還要配資料來源dataSource,這裡用的是上面c3p0的id。最後配mapperLocations,他的路徑是src/main/resources/mapper下的所有xml檔案,你千萬不能填錯,特別是用了自動生成mapper和實體類的工具的時候,他會在src/main/java下生成一個mapper資料夾,我曾經就把這個空資料夾的地址放入其中,把自己搞得焦頭爛額

配置掃描器將所有的dao包下的介面添入spring容器中,這個的話你只要注意他的name和value就好,這個value你就複製(ctrl+c)一下自己的包再貼上過來

這裡是配置事務控制,首先要獲取資料來源,我獲取的是我自己配上的c3p0,其中execution(* com.crud.service..*(..))這個你需要了解一下。execution是切入點指示符,是必須要有的東西,com.crud.service表示你的切入點是在這個service包下,這個".."表示就算是這個包下的子包也配置了事務控制,"*"表示所有的內容,"(..)"表示任意引數

這裡是配置事務增強,以get開頭的所有方法都會得到一定的優化,增強需要在advisor中引入,還有就是事務控制id的要和事務增強的id一致,方便控制事務的細節
這是最後一個,Mybatis(一些設定,起個別名)
還記不記得我們在Spring中配置了一個mybatis-config.xml?我們就在這個檔案下配置我們的Mybatis,那麼怎麼配呢?我們來看看官網咖,在百度中搜索mybatis,開啟第一個網頁,你可以看到一個忍者鳥

MyBatis官網

點選"getting start",把框起來的這部分複製到mybatis-config.xml,你可能會好奇這個東西是什麼?為什麼需要他?沒有他又會怎麼樣?
!DOCTYPE是一種 ofollow,noindex">標準通用標記語言 的文件型別宣告,它的目的是要告訴標準通用標記語言解析器,它應該使用什麼樣的文件型別定義( DTD )來解析 文件 。你可以簡單理解為mybatis規定了一定的規則讓你來寫這個配置檔案,把他加入mybatis後你就可以自動補全出configuration等配置標籤,沒有這個規則那些配置標籤肯定還是能生效,因為你已經在maven中已經添加了mybatis的jar包,但是你一個一個的手打標籤效率就很低了

在configuration中加入setting設定,這個的意思就是讓你的命名遵守駝峰規則,駝峰規則你要是不知道就百度一下吧,setting肯定也不止這麼一個,你可以點開Configuration XML,他這裡有個setting

你點進這個setting之後你就可以看到各種各樣的設定,這個就根據你專案的需求來定了

你還可以設定一下類型別名,方便我們引用
至此,一個SSM專案的整合已經完成了! 我再加一點額外知識,關於MyBatis的逆向工程,逆向工程聽著高大上,其實就是根據你的資料庫裡的表生成對應的實體類以及mapper(資料庫層面的具體操作,例如增刪改查),所需道具就是 MyBatis Generator
MyBatis Generator
百度搜索MyBatis Generator,開啟他,看一下

你會發現這個介面和MyBatis的一樣,其實我就是懶得在官網裡點而已....好的,我們點一下Running MyBatis Generator With Maven,開啟我們的逆向工程
因為我們使用了Maven,我可以用Maven來匯入他,去 Maven Repository ,搜尋MyBatis Generator,找個最新的版本新增進pom.xml中

選擇這一項,你就會看到一個例子,在專案的根目錄下建立一個mbg.xml,將他複製進來,複製進來以後你要將示例改為你自己的設定

將資料庫連線資訊改為自己的

將實體類的資訊配上,自己的包名和地址,到時候它自動生成的實體類就放在這個包下

設定好你要生成的mapper要放在哪,也是更改包名和地址

設定好你要生成的dao他放在那,依舊是更改包名和地址

最後這個tableName是資料庫的表名(資料庫裡表名是什麼你就是什麼,一字不要差),domainObjectName是實體類的名字(自己取名,最後別取的和資料庫的表名一模一樣,出錯了也不好分辨)

最後就是試一試能否自動生成,這五種方法都可以執行MBG,你是用哪一種都沒有問題,反正他都有例子

反正我用的Java程式碼的方式,你在寫java的地方建立一個類,給他一個主函式,把List那一長串放進去,導包,把new File("generatorConfig.xml");裡的xml改成你自己建立的mbg.xml,右鍵點選main,點選Run as再點選Java Application,然後重新整理一下專案,你的專案下就會多了很多自動生成的程式碼
總結
寫到這裡,我就把SSM的整合詳細走了一遍,鑑於我
懶得學
不會用Markdown文法,沒有辦法把程式碼放進一個框裡,如果你要是按照我的做法來搭框架可能會很煩,畢竟你是一行一行手敲嘛,但是你的理解也會比別人的深,成就感也會比別人大,也不是特別虧吧...如果你發現我說的有什麼不對的,歡迎指教!我們一起討論,一起進步!