1. 程式人生 > >Action+Service+Dao三層的功能

Action+Service+Dao三層的功能

1. Action/Service/DAO簡介:

Action是管理業務(Service)排程和管理跳轉的。
Service是管理具體的功能的。
DAO只完成增刪改查,就是拼接SQL,可以對查詢條件和結果進行判斷和處理等。

總結這三者,通過例子來解釋:

Action像是服務員,顧客點什麼菜,菜上給幾號桌,都是ta的職責;
Service是廚師,action送來的選單上的菜全是ta做的;
Dao是廚房的小工,和原材料打交道的事情全是ta管。

結合SSH框架
Model層就是對應的資料庫表的實體類。
Dao層是使用了Hibernate連線資料庫、操作資料庫(增刪改查)。
Service層:引用對應的Dao資料庫操作。
Action層:引用對應的Service層,在這裡結合Struts的配置檔案,跳轉到指定的頁面,當然也能接受頁面傳遞的請求資料,也可以做些計算處理。

以上的Hibernate, Struts,都需要注入到Spring的配置檔案中,Spring把這些聯絡起來,成為一個整體。

2. 三大框架Struts/Hibernate/Spring

Struts——控制用的
Hibernate——操作資料庫的
Spring——解耦用的
  1. Struts在SSH框架中起控制的作用,其核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,主要控制邏輯關係的處理。
  2. Hibernate是資料持久化層,是一種新的物件、關係的對映工具,提供了從Java類到資料表的對映,也提供了資料查詢和恢復等機制,大大減少資料訪問的複雜度。把對資料庫的直接操作,轉換為對持久物件的操作。
  3. Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。面向介面的程式設計,由容器控制程式之間的依賴關係,而非傳統實現中,由程式程式碼直接操控。這就是所謂“控制反轉”的概念所在:(依賴)控制權由應用程式碼中轉到了外部容器,控制權的轉移,是所謂反轉。依賴注入,即元件之間的依賴關係由容器在執行期決定,形象地說,即由容器動態地將某種依賴關係注入到元件之中,起到的主要作用是解耦。
Struts、Spring、Hibernate在各層的作用:

(1)Struts負責Web層:ActionFormBean接收網頁中表單提交的資料,然後通過Action進行處理,再Forward到對應的網頁。在Struts-config.xml中定義,ActionServlet會載入。
(2) Spring負責業務層管理,即Service(或Manager)。
(3)Hibernate,負責持久化層,完成對資料庫的crud操作。提供OR/Mapping。它由一組.hbm.xml檔案和POJO,是跟資料庫中的表相對應的。然後定義DAO,這些是跟資料庫打交道的類,它們會使用PO。

3. 框架業務邏輯分析:

在Struts + Spring + Hibernate的系統中,物件的呼叫流程是:JSP—Action—Service—DAO—Hibernate。

資料的流向是:ActionFormBean接受使用者的資料,Action將資料從ActionFormBean中取出,封裝成VO或PO,再呼叫業務層的Bean類,完成各種業務處理後再Forward。而業務層Bean收到這個PO物件之後,會呼叫DAO介面方法,進行持久化操作。

4.舉個例子

實現功能:輸入學號點選查詢,在另一個頁面顯示該學生的姓名與學號(該學號為前面輸入的)。

簡單描述一下:首先前端檔案xxx1.jsp裡有一個輸入框,輸入一串數字,然後點選查詢,.js獲取到學號傳入Action層(通過struts配置對應的Action函式,並開啟新頁面,同樣將學號傳入新頁面中),Action將學號(或者其他更多資訊)封裝進集合物件(如Page等),傳給Service層,如果我要記錄查詢時間,那麼就可以在Service層獲取並記錄等,Service層又將集合物件(可能是另一類,但肯定是另一個物件)傳給DAO,DAO獲取到該物件中的學號值,拼接查詢SQL,將查詢結果以集合物件返回給Sevice層,返回給Action層,在新頁面中結合Action的姓名引數和剛剛輸入的學號一起,展示出來。