2013年8月31日

Spring MVC 3 實作教學 (10) - 資料存取 ( Transaction、DAO 設定 )

前篇文章介紹了 Hibernate 與 Entity 的設定,建立了 Model 後還缺少了實際新增、修改、刪除的部份,因此本篇文章將會介紹 DAO、Service 部份如何實作。當然一旦有存取的發生勢必就需要 Transaction 控制,所以本篇也會一起介紹如何設定 Transaction Manager。



DAO : 

這部份開始前可以先參照之前建立的 User 物件,通常在撰寫 User 物件的新增、修改、刪除功能會抽離為兩個部份。為了增加程式上的彈性通常會定義出功能的介面與實作兩個部份,讓應用程式只知道介面部份,而實作部份就可根據不同狀況下調整程式,現在針對它來建立 DAO 介面部份。首先將 DAO 會擁有的 Method 列出,如下圖:


接著實作 UserDAO,針對每個 Method 定義出實際內容,如下圖:


上面我們將每個 Method 都一一實作出來,這邊記得必須使用 sessionFactory.getCurrentSession( ) 來運作。另外須注意一點,範例中 find 方法為 sessionFactory.getCurrentSession( ).load( ) ,Hibernate 有提供另一種方法 sessionFactory.getCurrentSession( ).get( ),其中差異請至 Hibernate 官方文件參考。

Service :

DAO 部份設定好後,我們還需要 Service 來提供服務。Service 定義的部份也是抽離為介面與實作兩個部份,Service 介面如下:


接著實作 UserService,內容如下:


這邊使用剛剛定義的  UserDAO,並且透過 @Service 標註此 Class  為 Service 元件。@Transactional 可針對此 Class 或 Method 附加上交易的管理。

Transaction Manager :

剛剛看到 Service 實作裡面有 @Transactional 的 Annotation,因此我們要在 Spring 設定檔裡宣告 Transaction Manager 以及其屬性。不過在設定 Transaction Manager 之前,我們還需要 AOP 的 Library 以及 aspectjweaver JAR檔 ( 搜尋 aspectjweaver 取得最新版本 ),放置於 /WebContent/WEB-INF/lib 底下。
Transaction Manager 於 Spring 設定檔 ( 如範例 mercury-servlet.xml ) 內容如下:


如此一來 Transaction Manager 基本上設定好了,Transaction 預設為發生 RuntimeException 時會 Roll Back,但如果想要指定某些特定的 Exception 發生時 Roll Back 或不 Roll Back。因此這自訂動作就需要運用到我們剛剛加入的 AOP 部份,詳細可以參考官方說明文件

接著我們在 Controller 建立基本資料存取的範例,首先查詢資料範例內容如下:


新增資料範例如下:


刪除資料範例如下:


如此一來 Spring MVC CRUD 的基本功能都建立完成了。其他 Spring Framework 相關教學可以參考本篇整理


熱門文章