2009-05-28 47 views
3

我见过数百万个DAO示例,并且大多数情况下它们都实现了单个实体的基本CRUD操作,可能有几个返回列表的方法(例如List getCustomers())。更新多个实体的方法通常不是DAO的一部分吗?

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

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

我只是想确保我不会错过任何东西,然后再继续前进,并做出看似明显的事情。

回答

0

我认为这些例子并不经常使用它。我的DAO有访问,创建和更新单个实体和记录集合的方法。

2

我发现批量更新通常使用数据库供应商提供的工具完成。

我同意我见过的DAO通常没有创建/更新/删除重载的方法来取List,但没有理由为什么他们不能。

一个让我想不通的想法是,当我写他们时,DAO不拥有交易。他们永远无法知道他们是哪一部分工作的一部分。这就是服务所做的。

我的建议是离开DAO,让单独的服务层拥有批处理操作。服务拥有交易逻辑。这也是一个很好的地方,它包含了将大块更新“分块”的逻辑。这可以让您检查批处理并保持回滚日志的大小可管理。

+0

嗯,它似乎我仍然必须在我的DAO中有一个方法,可以采取一个列表,以便我可以实现正确的批量更新。我仍然可以将我的服务方法中的批量拆分,并将它们全部在相同的事务下运行,是的? – Boden 2009-05-28 21:37:26

+0

不,我建议DAO仍然需要一个对象实例,并且服务会在一个循环中调用DAO(或者如果您正在“分块”它,则循环)。服务方法将是拥有交易的单个工作单元。该服务也可能批量处理以减少网络流量。 – duffymo 2009-05-28 21:42:27

0

void update(List)应该与void update(Item)相同,只有List人会更新多个项目。如果不是,应该是除非有非常具体的原因为什么不这样做。调用方法的开销不是一个问题,如果他们做同样的事情。

例如,调用update(Item) 1000次与调用update(List) 1相同,它与update(Item)相同只有1000次意味着性能差异很小。

相关问题