天天看點

spring4.0.2+hibernate4.3.5+struts2.3.16.1+c3p0內建SSH入門精簡official

之前寫過一篇類似的文章,現在回過頭來看很糟糕。 很多人在第一次大架構的時候感到很迷茫,包括本人。尤其是jar包的問題,那麼多,到底哪些該加,哪些不該加。網上雖然有很多教程和文章,但都是把一堆jar包壘上,然後給出一個demo。諾,照這樣做,架構就搭好了。看,我還加了cglib,aspectj呢。

其實,新手應該從搭一個SSH的最小系統開始,以後熟練了,再玩點高大上的,用aspectj,cglib之類的。

什麼是最小系統?

計算機或計算機相關專業都學過單片機,單片機有個最小系統,它由三個部分組成:單片機+晶振電路+複位電路。它用最少的元件組成了可以工作的單片機系統。 此處省略一些字。

那麼我們的SSH最小系統是什麼呢?

在我心目中,SSH的最小系統應該是這樣:

很簡單,就是MVC分層,實作基本的增删改查操作。 難點就在于事務的了解和配置。涉及到更新操作(增,删,改)是要開啟事務的,請知悉。沒有jdbc程式設計基礎,知道這點就足夠了。

準備工作:從官網下載下傳這些:

spring-framework-4.0.2.RELEASE-dist.zip,

hibernate-release-4.3.5.Final.zip,

struts-2.3.16.1-all.zip,

aopalliance.zip

(spring-aop.jar依賴這個jar包,spring沒有給出這個jar包很可惡,官方文檔也不提),

aspectj-1.8.0.M1.jar(

C:\Program Files\MySQL\MySQL Connector J\mysql-connector-java-5.1.34-bin.jar  (裝mysql的時候注意勾選上MySQL Connector J,這樣才能拿到mysql驅動jar包。以前可以直接下載下傳到,現在不行了)

準備完畢,我們開始:

①建立一個Dynamic Web Project。注意,如果你選擇的web module version是3.0,請在向導最後一步勾選上Generate web.xm deployment descriptor。這樣才會自動生成一個web.xml。

②拷貝這些jar包到WEB-INF/lib下。

spring4.0.2+hibernate4.3.5+struts2.3.16.1+c3p0內建SSH入門精簡official
spring4.0.2+hibernate4.3.5+struts2.3.16.1+c3p0內建SSH入門精簡official

具體過程是這樣的:

struts2的jar包:

 解壓struts-2.3.16.1-all\struts-2.3.16.1\apps\struts2-blank.war. 這是struts2的最小系統。這裡有struts2需要的最少jar包。log4j也配置好了,spring官方文檔提到spring唯一依賴的一個外部jar包是Log4j.jar。(其實不對還有aopalliance.jar和aspectjweaver.jar) 直接使用這個“空工程”能省我們很多事。 搭SSH我更傾向于從 Struts開始,因為它的jar包最簡單。

Hibernate的jar包:

 hibernate的jar包還好了解。就是required和optional\c3p0檔案夾下的jar包全部拷貝,很貼心不是。有一點需要注意,hibernate裡和struts2裡有一個重複的jar包——javassist-3.18.1-GA.jar。選擇hibernate裡的就可以了。  c3p0是Hibernate推薦的資料庫連接配接池,spring推薦的連接配接池是dbcp,卻沒有給出jar包。  拷貝c3p0的jar包同時,也請把驅動jar包mysql-connector-java-5.1.34-bin.jar一并拷貝,免得忘了。

spring的jar包:

關鍵就在這裡。不知道該怎麼下手,管他3721,Ctrl+A?這樣不好,沒有用到的功能沒必要加備援jar包。其實了解了spring的結構也很簡單,看:

spring4.0.2+hibernate4.3.5+struts2.3.16.1+c3p0內建SSH入門精簡official

這是spring的結構。

    ①是spring容器的核心,這4個jar包都要。

    ②我們是web工程,這個jar包必不可少。

    ③我們要連資料庫,進行增删改查操作。是以jdbc,orm這兩個Jar包需要。jdbc需要資料庫連接配接池,是以我們用了一個連接配接池c3p0。 orm是關系映射對象,是Hibernate幹的事,但是spring既然是容器,是以它必須提供這個接口。

    ④.注意這一塊的了解: 增删改需要開啟事務。spring提供聲明式事務(declarative transaction)。可以是xml-based,也可以是annotation-based。 開啟事務是要在方法執行前就要開始的。就是說我們要攔截方法後開啟事務,是以需要AOP的支援。AOP和Aspect是分不開的。是以這兩個Jar包也是需要的。由于spring-aop.jar依賴aoplliance.jar,而且spring自帶

的AOP用了aspectjweaver.jar裡的某些類,是以這兩個個jar也是需要的(spring給的jar包漏了這兩個jar包,實在是不應該)。      強烈建議spring把我提到的這些jar包放在一個required包下,跟Hibernate一樣,這樣多好。我說的這些已經是最基礎的功能了,用的也是最少的jar包,沒有半點備援 。

再強調最後一個jar包。是struts裡的一個jar包叫struts2-spring-plugin-2.3.16.1.jar。 因為我們把struts交給spring這個容器管理了,是以需要這個東東。

至此,所有Jar包都解釋清楚了。讀者不應該再對SSH需要哪些jar包感到疑惑。

struts的配置檔案:在解壓完struts2-blank這個工程的時候已經有了。 spring說需要唯一一個外部的jar包 log4j.jar 。在這個工程裡也有了。 

下面開始配置spring和hibernate。 spring和hibernate都配置在一個叫ApplicationContext.xml裡。

從哪開始呢。 打開spring官方文檔:spring-framework-4.0.2.RELEASE-dist\spring-framework-4.0.2.RELEASE\docs\spring-framework-reference\htmlsingle\index.html

1)Ctrl+F 搜尋 ApplicationContext.xml ,我們來到這裡

Common configuration

在web.xml裡加這個:

這樣我們的web工程就使用上了spring。

2)我們知道ApplicationContext.xml其實就是一個bean的集合。 這個配置檔案裡配置都是各種bean。是以我們搜尋beans

來到這裡:

The following example shows the basic structure of XML-based configuration metadata:

把這些拷貝到 ApplicationContext.xml裡  

這樣我們就有了一個最簡單的spring配置檔案了。

3)關鍵步驟:這樣考慮:

    連資料庫 ->配置dataSouce

     使用hibernate的session->配置sessionFactory

    請spring幫我們管理事務->配置txManager   

( 如果我們使用注解形式開啟事務,隻需配置 打開注解模式 即可。如果我們使用xml形式配置事務,那麼我們還要配置aop。)

我們的dataSouce使用c3p0,直接搜尋c3p0.找到這個

然後搜尋sessionFactory找到這裡:

因為我們使用Hibernate4.x是以改成:

稍作修改:

注意context标簽和property-placeholder屬性在context命名空間裡。是以要引入context.xsd檔案

然後搜尋jdbc.properties。 最後這個檔案是這樣的:

下面是最難的事務:(兩種方式:xml-based; annotation-based)

搜尋 transaction來到這裡:

When the above POJO is defined as a bean in a Spring IoC container, the bean instancecan be made transactional by adding merelyone line of XML configuration:

i) 注解形式開啟事務:其實就一句話, 它是最簡單的。我們一般都用這種形式。

然後在service層裡的方法上加上這個即可:

注意這回命名空間多了這些:

知道這一大坨東西怎麼來的了吧。就是這樣一點一點加上來的。 網上給的都是完整的一大坨,也不知道怎麼來的。

ii) xml方式開啟事務是這樣的:

最終的ApplicationContext.xml是這樣子的:

最後解釋一下這句話:

因為我們的daoimpl裡有這個

我們讓spring管理hibernate。所有session都讓spring幫我們打開和關閉。 spring的HibernateTemplate類需要sessionFactory。是以這裡隻用一個setter注入sessionFactory即可。這段代碼在spring的文檔裡也有。這文檔寫的到位。

至此SSH配置完畢。也許還有沒說清楚的地方。 源碼奉上。 希望大家養成看文檔的好習慣,也許一開始我們并不知道從哪下手,沒關系,先弄清楚我們要做什麼,做這些東西我們需要什麼。摸清楚了大緻流程,就隻管Ctrl+F往文檔上招呼。筆者當初在搭這個架構的時候感覺很棘手,搭了很多次,寫點心得希望對你有幫助。

最後一個小插曲。 如果用annotation-based方式開啟事務 aspectjweaver.jar可以不加。 但是用xml-based方式配置事務,這個jar必須要加。讀者可以自己試一下。 在maven工程中aspectjweaver.jar是必須要加的,不然啟動報錯。

這是下載下傳連結:

http://download.csdn.net/detail/ahau10/8951449