2013-10-03 89 views
218

我正在瀏覽一個文檔,並且遇到了一個名爲DAO的術語。我發現它是一個數據訪問對象。有人能解釋我實際上是什麼嗎?Java中的數據訪問對象(DAO)

我知道它是某種用於訪問不同類型數據源的數據的接口,在我的這個小小的研究中間,我遇到了一個叫做數據源或數據源對象的概念,事情搞糟了在我腦海裏。

我真的很想知道DAO是以編程方式使用它的地方。它是如何使用的?任何鏈接到頁面,從非常基本的東西解釋這個概念也是值得讚賞的。

+9

http://stackoverflow.com/questions/6401543/what-is-dao-factory-pattern 我真的推薦在查詢結束時用「site:stackoverflow.com」搜索谷歌。 –

回答

303

數據訪問對象基本上是提供對底層數據庫或任何其他持久性存儲的訪問的對象或接口。

這個定義來自: http://en.wikipedia.org/wiki/Data_access_object

檢查也是序列圖在這裏: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

也許一個簡單的例子可以幫助你理解這個概念:

比方說,我們要代表的實體僱員:

public class Employee { 

    private int id; 
    private String name; 


    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

} 

em ployee實體將被持久化到數據庫中對應的Employee表中。 一個簡單的DAO接口來處理操縱僱員實體會像所需的數據庫操作:

interface EmployeeDAO { 

    List<Employee> findAll(); 
    List<Employee> findById(); 
    List<Employee> findByName(); 
    boolean insertEmployee(Employee employee); 
    boolean updateEmployee(Employee employee); 
    boolean deleteEmployee(Employee employee); 

} 

接下來我們要提供一個具體的實現該接口來處理SQL服務器,另一個處理平文件等

+0

喜rami,m真的很高興,你試圖用一個非常簡單的例子解釋我,這是我需要的。你能解釋一下你說的'具體實現'嗎?你的意思是我們必須通過實現一個類的接口來寫下方法的定義。 –

+0

是的,沒錯。就像一個名爲EmployeeSQLServerDAO的類,它通過以與SQL Server – Rami

+4

相關的方式爲其方法提供完整的實現來實現EmployeeDAO接口,這樣所有的DAO都是??它只是一個我們正在寫入的類來訪問數據庫。無論何時我們需要數據庫中的服務,我們都會創建一個DAO對象,將其用於數據庫操作,然後在我們從數據庫中獲得我們想要的內容後,即可擺脫DAO。我對嗎??並且我可能知道這個DAO概念rami的範圍? –

12

DAO(數據訪問對象)是企業應用程序中非常常用的設計模式。它基本上是用來訪問每個數據源(DBMS,XML等)數據的模塊。我建議你閱讀一些例子,像這樣的:

DAO Example

請注意,有不同的方式來實現原來DAO Pattern,並且有可以簡化您的工作很多框架。例如,ORB(對象關係映射)框架(如iBatis或Hibernate)用於將SQL查詢的結果映射到Java對象。

希望它有幫助, 再見!

3

我認爲最好的例子(以及解釋)你可以在oracle網站上找到:here。另一個很好的tuturial可以找到here

+2

它只是我還是大多數Java教程和信息網站超舊?該教程是從2008年起!很多關於各種Java主題的頂級搜索結果甚至更老。 – bergie3000

+1

@ bergie3000:這種模式並不新鮮。 –

1

數據訪問對象模式或DAO模式用於將低級數據訪問API或操作與高級業務服務分開。以下是數據訪問對象模式的參與者。

數據訪問對象接口 - 該接口定義了要在模型對象上執行的標準操作。

數據訪問對象具體類 - 該類實現上述接口。這個類負責從一個可以是數據庫/ xml或任何其他存儲機制的數據源獲取數據。

模型對象或值對象 - 此對象是簡單的POJO包含get/set方法來存儲使用DAO類檢索的數據。

示例代碼here ..

1

數據訪問對象管理與數據源的連接,以獲得和存儲data.It抽象爲業務對象的底層數據訪問實現,以使數據源的透明訪問。 數據源可以是任何數據庫諸如RDBMS,XML儲存庫或平面文件系統等

49

什麼是數據訪問對象(DAO) -

它是一個對象/接口,其用於從數據存儲的數據庫訪問數據

爲什麼我們使用DAO:

它抽象數據從數據資源的檢索,諸如數據庫。其概念是「將數據資源的客戶端接口與其數據訪問機制分開。」

直接訪問數據的問題是數據的來源可能會改變。例如,考慮您的應用程序部署在訪問Oracle數據庫的環境中。然後將其部署到使用Microsoft SQL Server的環境中。如果您的應用程序使用存儲過程和特定於數據庫的代碼(例如生成數字序列),那麼您如何在應用程序中處理這些代碼?你有兩個選擇:

  • 重寫你的應用程序中使用SQL Server而不是甲骨文(或添加有條件的代碼來處理分歧),或
  • 創建插圖中的應用邏輯層和數據訪問


它在所有被稱爲DAO模式,它包括以下內容:

  • 數據訪問對象接口 - 此接口定義了要在模型對象上執行的標準操作
  • 數據訪問對象具體類 - 該類實現上述接口。這個類是負責從數據源獲取數據,數據源可以是數據庫/ xml或任何其他存儲機制。
  • 模型對象或數值對象 - 此對象是簡單POJO包含獲取/設置方法來存儲使用DAO類檢索到的數據。

請檢查這個例子中,這將更加清晰明確的事情。

Example
我認爲這事是必須已清除DAO的理解達到一定的延長。

1

DAO是一種類似於3層架構中的「持久性管理器」的行爲,以及DAO也可以設計模式,因爲您可以參考「四人幫」一書。 您的應用程序服務層只需調用DAO類的方法,但不知道DAO方法的內部細節隱藏&。

0

Pojo也被認爲是Java中的Model類,我們可以爲私有中定義的特定變量創建getter和setter。 記住所有變量都在這裏聲明與私人修改器

0

Dao clases用於重用jdbc邏輯& Dao(數據訪問對象)是一種設計模式。 dao是一個簡單的java類,它包含JDBC邏輯。

數據訪問層已經證明在單獨的業務邏輯層和持久層中很好。 DAO設計模式完全隱藏了客戶端的數據訪問實現

Java數據訪問對象(Java DAO)是業務應用程序中的重要組件。業務應用程序幾乎總是需要從關係數據庫或對象數據庫訪問數據,Java平臺提供了許多用於訪問這些數據的技術。最古老和最成熟的技術是使用Java數據庫連接(JDBC)API,它提供了對數據庫執行SQL查詢並逐個獲取結果的功能。

3

不要混淆太多的解釋。 DAO:從名稱本身來說,它意味着使用對象訪問數據。 DAO與其他業務邏輯分離。