連續寫了兩篇關於階層的東西,一直在講層與層之間的關係,資料對象在層次之間的傳遞處理,那麼到底什麼應該放到DAO層呢?當然,我在之前簡單的介紹了一下DAO層的模型。現在詳細說明一下,到底什麼東西在DAO層。
首先,以JDBC為基礎,開始思考這個問題。
在查詢一個使用者資訊(id,name)的時候,我們常常是這麼操作的:
1. 擷取一個connection
2. 產生一個statement
3. 拼接SQL語句
4. 查詢對象,擷取結果集(假設已經找到我們需要的對象)
5. 讀取結果集資訊,封裝成需要的使用者物件
6. 關閉結果集,statement,connection
其次,考慮一下Hibernate怎麼處理?
1. 建立使用者資訊對象,並配置好對象關係映射
2. 擷取一個Session對象
3. 生產一個Query對象
4. 編寫HQL語句
5. 執行Query.list()方法,擷取對象資訊(這裡Hibernate架構根據映射關係,完成對象與關係之間的轉換)
6. 關閉Session對象
細細看來,其實,他們處理都是基本相同的,只是不同的就是在進行封裝過程中,略有不同了。
那麼我們來看一下Ibatis是如何處理的,
1. 編寫PO對象,配置sqlMap檔案
2. 產生SqlMapClient對象
3. 操作對應的SQL,返回結果(sql語句,我們寫的設定檔中,對象封裝由Ibatis架構完成)
4. 關閉SqlMapClient
DAO層處理的應該是對象關係相互轉換的工作,它需要的是一個連線物件,但是它不關心這個對象怎麼來,而且不關心在轉換工作完成後,做怎麼樣的處理。就像Ibatis架構似的,它在項目就充當著DAO的作用,因為我們通過設定檔和實體物件我們已經完成了對象關係的轉換。而針對JDBC和Hibernate技術,我個人覺得,我們可以把一個串連作為參數傳遞到DAO,以避免我們為DAO的每個方法中都擷取一個連線物件,這樣我們就可以不用在DAO中處理資料庫連接的開啟和關閉了,從何在DAO外面,實現事務的管理。
對於事務這邊的東西,去放到商務邏輯層好了~