问题标签 [dao]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
815 浏览

design-patterns - 更新多个实体的方法通常不是 DAO 的一部分吗?

我已经看到了一百万个 DAO 示例,并且在大多数情况下,它们都为单个实体实现了基本的 CRUD 操作,可能还有一些返回列表的方法(例如 List getCustomers())。

但是,我从未见过有更新、删除或创建多个实体的方法的示例,例如:void update(List)。

更新多个实体的方法通常不是 DAO 的一部分,还是它们只是不经常在示例中使用?我有一个要求,我必须进行一些批量插入,并且调用 myDAO.create() 一百次并不是非常有效。

我只是想确保在继续做看起来很明显的事情之前我没有遗漏任何东西。

0 投票
5 回答
8799 浏览

java - JDBC DAO - 有什么好的参考实现吗?

谁能给我指出一个使用 JDBC 编写良好的 DAO,它涵盖了 DAO 应该处理的所有异常。

我在 java.sun.com 上查看了一些示例,它们的蓝图,但有很多理论和更少的代码。

浏览 Spring DAO 源代码会很有启发性,但这对我来说太复杂了。

0 投票
7 回答
1991 浏览

mysql - 测试数据库中重复键的最佳方法

这更像是一个正确性问题。假设我的数据库中有一个带有主键列的表。在我的 DAO 代码中,我有一个名为 insertRow(string key) 的函数,如果表中不存在该键,该函数将返回 true 并使用该键插入一个新行。否则,如果已经存在具有该键的行,则返回 false。让 insertRow 首先检查密钥是否存在更好/更糟,还是继续执行插入并捕获重复的密钥错误?或者节省单个 select 语句太微不足道,甚至不用担心?

所以在 sudo 代码中:

或者

0 投票
6 回答
3825 浏览

ms-access - 为什么极少数情况下 bof/eof 之一对于新的非空记录集是正确的

2个问题:

  1. 上面的测试可以错误地评估为假,但很少见(我的代码中潜伏了一个,今天它失败了,我相信这是 5 年来日常使用中的第一次——这就是我发现它的方式)。为什么对于非空记录集,bof/eof 中的一个偶尔会为真。它似乎如此罕见,以至于我想知道它为什么会发生。

  2. 这是一个万无一失的替代品:

    /li>

编辑以添加代码的详细信息:

客户有订单,每个订单以一个项目开始,以一个BeginOrder项目结束,EndOrder中间是订单中的项目。

SQL 是:

在这种情况下,看起来这个

0 投票
3 回答
775 浏览

coldfusion - 如何将查询中的记录放入 DAO?

我已经编写了一个网关来从我的数据库中获取结果集。我如何将每一行存储在一个单独的 dao 中,以便我可以进一步操作每条记录?或者我可以直接访问结果集来获取记录吗?

这是我的网关(顺便说一句,我是否应该将 cfquery 中的条件逻辑写入扩展此网关的单独 cfc?)

我已经阅读了很多文章,似乎对这个问题有不同的看法(DAO vs. Gateway,DAO & Gateway 等)。什么是最佳实践,专业人士会做什么?

0 投票
3 回答
1275 浏览

java - 我的 DAO 策略好吗?

我正在使用休眠。问题在底部。

目前的策略

这很简单。

首先,我有一个基本的Dao<T>.

它作为一个基类很好,它将最常用的方法传递给它的Session.

当需要对模型使用查询时,它会进入该模型的特定 DAO,该 DAO 继承自Dao<T>.

这种方法一直运作良好。

然而...

但是,今天我发现很多时候一个实例需要重新附加到Session并且类似于以下的行最终会发生:

...我觉得这很糟糕,因为

  1. 我不喜欢指定冗余Book.class
  2. 如果出现 a DaoBook,这个结构就会过时。

所以我变成Dao<T>了一个抽象类,继续重构旧代码。

问题

为了Dao<T>从代码库中删除引用,我想到了两种方法:

  1. 为每个需要附加的类创建特定的 DAO,这将生成许多几乎为空DaoBook的 s 和排序。
  2. 创建一个拥有 aDao<Object>并仅公开附件方法(即save()update())的类。

我倾向于使用#2,但我认为这种“ AttacherDao”模式可能很糟糕,所以我想听听你的意见。

#2有什么缺点吗?另外,你觉得“当前策略”有什么问题吗?

0 投票
4 回答
32620 浏览

jpa - 有没有办法更改方法上的 JPA 获取类型?

有没有办法在不编辑实体对象的情况下更改单个方法的 JPA 获取类型?

我有一个由 JPA 实体类组成的共享 ORM 层。这个 ORM 层由两个 DAO 层访问。一个 DAO 需要延迟获取,因为它适用于我的 Web 应用程序,另一个需要急切获取,因为我需要它是线程安全的。

这是我的线程安全 DAO 中的示例方法,

我如何让这个方法(或整个类)使用渴望获取?

0 投票
6 回答
3651 浏览

java - 如何以线程安全的方式在 DAO 中缓存信息

我经常需要为一些不经常更改的参考数据实现 DAO。我有时将它缓存在 DAO 的集合字段中 - 这样它只加载一次并在需要时显式更新。

然而,这带来了许多并发问题——如果另一个线程在加载或更新数据时尝试访问数据会怎样。

显然,这可以通过使数据的 getter 和 setter 同步来处理 - 但对于大型 Web 应用程序来说,这是相当大的开销。

我已经包含了一个微不足道的有缺陷的例子,说明我作为稻草人需要什么。请提出替代方法来实现这一点。

有关更多信息,我正在使用 Hibernate 和 Spring,但此要求将适用于许多技术。

一些进一步的想法:

根本不应该在代码中处理它 - 而是让 ehcache 或类似的处理它?我缺少一个共同的模式吗?显然有很多方法可以实现这一点,但我从未找到一种简单且可维护的模式。

提前致谢!

0 投票
1 回答
4552 浏览

php - PHP 中的 ORM 和 DAO

我是一名 PHP 开发人员,熟悉 ORM(Doctrine and Propel),但很少听说 DAO。从 PHP 开发的角​​度来看,ORM 和 DAO 有什么区别和关系?

如果我使用 Symfony 开发非常大而复杂的项目,使用 DAO 会更好吗?(我认为ORM有点重,但我对DAO知之甚少)

0 投票
3 回答
1366 浏览

ms-access - 旧版 MS Access 应用程序需要支持多个用户

我目前在一个 4 人团队中,负责开发和维护旧版 MS Access 应用程序。

该应用程序非常大,有数百个表单、报告、查询和表格。

目前,我们将前端分为大约 7 个 mde 组件,每个组件本质上都是一个应用程序,并由一个通用前端连接,该前端本质上只是一个菜单 GUI。

我们使用链接表将此前端连接到 MS Access 后端,在代码本身中使用 OpenDatabase(C:\access.mdb) 调用。这个应用程序已经存在了一段时间,因此使用 DAO 连接到 Access 97 后端。

这意味着应用程序的每个用户都有自己的数据库本地副本以进行更改。我们有一个精心控制变更的环境,确保一次只有一个人可以处理数据,他们必须在将主数据库传递给下一个人之前验证所有更改。

委婉地说,这种变更控制环境令人窒息,很快我们将需要在一个时间范围内进行更多的数据更改,这使得单用户访问变得不可行。

所以,我们需要转向多用户访问,但多用户我的意思是只有大约 4 人。这些人可能不在同一个办公室,因此需要某种形式的远程数据库连接。

整个应用程序可能会在一两年内重新设计,将前端和后端都从 MS Access 移开。但是,我们需要尽快进行多用户访问。

那么,多用户幸福的最快途径是什么?

我们正在考虑的建议包括:

  • 设置 VPN 以便 MS Access 认为它​​正在访问常规网络驱动器。这看起来会很慢,我不确定 VPN 是否足够可靠,但这只是我们追求的临时解决方案。
  • 将 mdb 后端转换为供多用户远程使用的东西,例如 SQL Server。我们只是不知道如何快速轻松地做到这一点(例如,我们依赖于字段验证规则)我们可能还必须转换回 MS Access 格式,因为其他应用程序接受相同的 .mdb 文件作为数据输入。
  • 几乎可以由 1 或 2 个人在几个月内完成的任何事情。

编辑:回应以下评论。

应用程序处理的数据是高度安全的关键数据。它很少更改,并且在导出之前必须经过验证以显示没有逻辑错误。实际上,数据比应用程序本身受到更重的限制!

数据以非平凡的方式相互关联。因此,由于复杂的业务逻辑,对一个表中的记录的更改可能会使另一个表中的记录无效。因此,目前,mdb 数据文件的一份副本被指定为主数据库。任何时候只有一个人拥有主人。如果要对其进行更改,则必须从当前拥有该数据库的人那里获取该数据库。这通常不是问题,因为数据更改很少,以至于有足够的时间发生这种情况。

然而,一个巨大的变化即将到来,我们没有足够的时间来以这种方式工作。我们必须让多人同时处理数据。现在我知道您可以在网络驱动器上共享 mdb 文件,并让同一个办公室的多人在几乎没有风险的情况下处理该文件,但我们需要来自不同公司的人员同时处理数据. 据我了解,设置 VPN 来共享数据是一个糟糕的计划。

我相信我们必须将后端从 MS Access 更改为类似 SQL Server 的东西。但是以这种方式转换模式有多容易?SQL Server 中如何表示 MS Access 表验证规则?