DAO(Data Access Object)是一個數據訪問接口,數據訪問:顧名思義就是與數據庫打交道,夾在業務邏輯與數據庫資源中間。詳解DAO模式(上)
在覈心J2EE模式中DAO的定義是:爲了建立一個健壯的J2EE應用,應該將所有對數據源的訪問操作抽象封裝在一個公共API中。用程序設計的語言來說,就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數據源進行交互的時候則使用這個接口,並且編寫一個單獨的類來實現這個接口在邏輯上對應這個特定的數據存儲。
按老夫的理解來說:就是單獨建立一個可以進行數據庫增、刪、改、查等操作的類,以後進行任何有關數據庫的操作,只實例化該類並調用在該類中預先寫好的方法進行操作即可。DAO模式使表示層與業務邏輯層的代碼進一步分離開來,這樣可以降低代碼之間的耦合度,例如JSP或HTML語言中不會混合過多的Java代碼和SQL語句。
實話說,在寫DAO的時候個人感覺挺麻煩的,但是一旦寫完DAO之後,剩下的工作就可以減少之後很多不必要的麻煩了。因爲使用工廠的設計模式可以對其進行管理,在需要數據庫操作的JAVA或者JSP裏只需要導入一個工廠類就可以調用許多方法,去完成整個過程的數據操作。而且也使得後期的維護變得十分方便。
由上圖我們可以看出:一個程序的標準開發結構分爲客戶層、顯示層、業務層、數據層、資源層。以下爲各層的介紹:
①客戶層:如果該程序是一個網站系統,那麼對應的客戶層爲用戶的瀏覽器。
②顯示層:主要是使用JSP或servlet進行頁面顯示。
③業務層(Business Object,業務對象):將多個原子性的DAO操作組合,形成一個完整的業務邏輯。
④數據層:提供多個原子性的DAO操作,例如:增、刪、改、查子操作。
⑤資源層:數據庫資源文件,只能使用DAO進行操作。
在整個DAO中實際上是以接口爲操作標準的,即客戶端依靠DAO實現的接口進行操作,而服務端要將接口進行具體的實現。
在老夫寫的DAO中,主要分爲了以下幾個類:
①VO類:主要用屬性、getter()、setter()組成。VO類中的屬性與數據庫中的字段一一對應,每一個VO類對象對應數據庫該表中的一條記錄。
②連接類:主要實現Java通過jdbc實現對Oracle數據庫的連接。
③DAO的標準接口、真實實現類以及代理實現類:主要實現對數據庫的操作。
④工廠類:通過工廠類獲取一個DAO的實例化對象。
個人寫了一個在網頁中添加員工信息和查找員工信息簡單的一個小程序,使用的是Oracle數據庫。其中Emp是員工信息類。
Emp在Oracle的屬性如下圖:
想必各位都能看懂這些屬性的意思吧,只是全大寫有些不習慣。
以下是老夫寫的類文件的概覽圖:
可能很多人會搞不清爲什麼要寫那麼多東西,給出它們的關係圖一張:
下一節講解具體內容 —— DAO模式(中)