我在浏览一份文档时,遇到了一个叫做DAO的术语。我发现它是一个数据访问对象。谁能给我解释一下这到底是什么?
我知道它是一种用于访问来自不同类型数据源的数据的接口,在我的这个小研究中,我偶然发现了一个叫做数据源或数据源对象的概念,我的头脑中混乱了。
我真的想知道DAO在编程上是什么,以及它在哪里被使用。它是如何使用的?任何从最基本的东西解释这个概念的页面链接也很受欢迎。
我在浏览一份文档时,遇到了一个叫做DAO的术语。我发现它是一个数据访问对象。谁能给我解释一下这到底是什么?
我知道它是一种用于访问来自不同类型数据源的数据的接口,在我的这个小研究中,我偶然发现了一个叫做数据源或数据源对象的概念,我的头脑中混乱了。
我真的想知道DAO在编程上是什么,以及它在哪里被使用。它是如何使用的?任何从最基本的东西解释这个概念的页面链接也很受欢迎。
当前回答
我只是想用我在一个项目中经历的一个小故事来解释它。首先,我想解释为什么DAO很重要?而不是问什么是DAO?为了更好地理解。
为什么DAO很重要? 在我的项目中的一个项目中,我使用了Client.class,它包含了我们系统用户的所有基本信息。当我需要客户端时,每次我都需要在需要的地方做一个丑陋的查询。然后我觉得这降低了可读性,产生了很多冗余的样板代码。
然后我的一个高级开发人员引入了一个QueryUtils.class,其中所有的查询都是使用公共静态访问修饰符添加的,这样我就不需要到处查询了。假设当我需要激活的客户端时,我只需调用-
QueryUtils.findAllActivatedClients();
通过这种方式,我对我的代码进行了一些优化。
但是还有一个问题!!
我觉得queryutils .类增长得非常快。这个类中包含了100多个方法,读取和使用起来也非常麻烦。因为这个类包含其他域模型的查询(例如产品、类别、位置等)。
超级英雄CTO先生提出了新的解决方案DAO,最终解决了这个问题。我觉得DAO是非常特定于领域的。例如,他创建了一个名为ClientDAO.class的DAO,其中可以找到所有与Client.class相关的查询,这对我来说似乎非常容易使用和维护。巨大的QueryUtils.class被分解成许多其他领域特定的DAO,例如ProductsDAO.class, categororiesdao .class等,这使得代码更可读,更可维护,更去耦。
DAO是什么?
它是一个对象或接口,它提供了一种从数据库访问数据的简单方法,而无需每次都以可重用的方式编写复杂而丑陋的查询。
其他回答
数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分开。以下是数据访问对象模式的参与者。
数据访问对象接口——这个接口定义了要在模型对象上执行的标准操作。
数据访问对象具体类——这个类实现了上面的接口。该类负责从数据源获取数据,数据源可以是database / xml或任何其他存储机制。
模型对象或值对象——该对象是简单的POJO,包含get/set方法,用于存储使用DAO类检索到的数据。
示例代码在这里..
不要被太多的解释弄糊涂了。DAO:从名称本身来看,它的意思是使用对象访问数据。DAO与其他业务逻辑分离。
我只是想用我在一个项目中经历的一个小故事来解释它。首先,我想解释为什么DAO很重要?而不是问什么是DAO?为了更好地理解。
为什么DAO很重要? 在我的项目中的一个项目中,我使用了Client.class,它包含了我们系统用户的所有基本信息。当我需要客户端时,每次我都需要在需要的地方做一个丑陋的查询。然后我觉得这降低了可读性,产生了很多冗余的样板代码。
然后我的一个高级开发人员引入了一个QueryUtils.class,其中所有的查询都是使用公共静态访问修饰符添加的,这样我就不需要到处查询了。假设当我需要激活的客户端时,我只需调用-
QueryUtils.findAllActivatedClients();
通过这种方式,我对我的代码进行了一些优化。
但是还有一个问题!!
我觉得queryutils .类增长得非常快。这个类中包含了100多个方法,读取和使用起来也非常麻烦。因为这个类包含其他域模型的查询(例如产品、类别、位置等)。
超级英雄CTO先生提出了新的解决方案DAO,最终解决了这个问题。我觉得DAO是非常特定于领域的。例如,他创建了一个名为ClientDAO.class的DAO,其中可以找到所有与Client.class相关的查询,这对我来说似乎非常容易使用和维护。巨大的QueryUtils.class被分解成许多其他领域特定的DAO,例如ProductsDAO.class, categororiesdao .class等,这使得代码更可读,更可维护,更去耦。
DAO是什么?
它是一个对象或接口,它提供了一种从数据库访问数据的简单方法,而无需每次都以可重用的方式编写复杂而丑陋的查询。
什么是数据访问对象(DAO) -
它是一个对象/接口,用于从数据存储的数据库中访问数据。
为什么使用dao:
从数据资源(如数据库)中提取数据的方法。 其概念是“将数据资源的客户端接口与其数据访问机制分离”。
直接访问数据的问题是数据的来源可能会改变。例如,假设您的应用程序部署在访问Oracle数据库的环境中。然后将其部署到使用Microsoft SQL Server的环境中。如果应用程序使用存储过程和特定于数据库的代码(比如生成一个数字序列),在应用程序中如何处理?你有两个选择:
重写应用程序以使用SQL Server而不是Oracle(或添加条件代码来处理差异),或者 在应用程序逻辑和数据访问层之间创建一个层
DAO模式由以下内容组成:
数据访问对象接口——这个接口定义了要在模型对象上执行的标准操作。 数据访问对象具体类——这个类实现了上面的接口。该类负责从数据源获取数据 它可以是数据库/ XML或任何其他存储机制。 模型对象或值对象——该对象是简单的POJO,包含get/set方法,用于存储使用DAO类检索到的数据。
看例子
我希望这已经澄清了您对DAO的理解!
数据访问对象基本上是一个对象或接口,它提供对底层数据库或任何其他持久性存储的访问。
这个定义来自: 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;
}
}
员工实体将被持久化到数据库中相应的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 server,以及另一个处理平面文件等。