DAO、ORM 和查询

Posted

技术标签:

【中文标题】DAO、ORM 和查询【英文标题】:DAO, ORM and Queries 【发布时间】:2010-12-20 21:13:03 【问题描述】:

需要将记录堆中的一个字段更新为相同的值。使用 DAO/ORM 结构,我会检索每个父对象,遍历每个子对象,更新它的字段,然后保存它。

只写 SQL 会更快:update table set field = value where criteria = specified。

我如何将这些东西组合在一起?我是否只是坚持使用 dao 结构:

for (Table t : getTableDao().getTables())  
  for(Child c : t.getChildren())  
    c.setValue(1);  
    getChildrenDao().save(c);  
  

干杯。

【问题讨论】:

您使用的是哪个 ORM?许多允许您在需要时编写一些 sql。 手工制作:O。当前项目只有 5 个主表,所以我快速创建了一个带有一些基本 ORM 的简单 dao 系统。我将允许对我认为的 daos 进行查询。该应用程序将部署在非常有限的机器上,所以我关心使用 Hibernate。是否有可以与嵌入式 derby 一起使用的轻量级 ORM? 哦,它是一个基于 Java SE 5 的应用程序,带有 Swing 我决定为这个简单的数据库使用 JPA (TopLink)。使用 DAO 结构,我们仍然可以运行这些批量更新查询。 【参考方案1】:

一般来说,不应以可能被视为“正常 ORM”的方式进行大规模更新,正如您所描述的那样,循环遍历每个对象。

任何合理的 ORM 都有一种机制让您按照您的建议运行正常的 SQL 更新语句,这通常是正确的方法。

仅仅因为您使用的是 ORM 并不意味着您不能利用下面的基于关系集的系统。当对象有意义时使用对象,当 SQL 有意义时使用 SQL。

【讨论】:

以上是关于DAO、ORM 和查询的主要内容,如果未能解决你的问题,请参考以下文章

[转]Android ORM系列之GreenDao最佳实践

DAO、Spring 和 Hibernate

JDBC查询实例

Java框架之MyBatis 06-全局配置-mapper映射-分步查询

orm聚合查询分组查询F查询和Q查询

ORM之查询