java - 我应该总是从数据库中检索完整的对象吗?

标签 java oop database-design architecture orm

这是一个非常简单的问题,适用于使用 java 编写 Web 界面。比如说,我没有使用 ORM(即使我正在使用一个),假设我的应用程序中有这个 Car (id,name, color, type, blah, blah) 实体并且我有一个 CAR 表在数据库中代表这个实体。所以,假设我只需要更新一堆汽车上的一部分字段,我知道典型的流程是:

  1. DAO 类 (CarDAO) - getCarsForUpdate()
  2. 遍历所有 Car 对象,仅更新颜色为绿色或其他颜色。
  3. 另一个 DAO 调用 updateCars(Cars cars)。

现在,对于什么是简单的选择和更新查询,这不是拐弯抹角吗?在上面的第一步中,我将从数据库中检索整个对象数据:“select id,name,color,type,blah,blah.. where ..from CAR”而不是“< strong>从 CAR 中选择 id、颜色...”。那么为什么我应该在发布 DAO 调用时检索那些额外的字段我永远不会使用“颜色”以外的任何东西?这同样适用于最后一步 3。或者,假设我只查询 id 和颜色(选择 id、颜色)并创建一个只填充 id 和颜色的汽车对象——这完全没问题,不是吗?无论如何,Car 对象是贫血的?

这一切(面向对象)看起来是不是有点假?

最佳答案

首先,如果 RDBMS 可以处理您的查询,我更愿意接受它。原因是您不希望 JVM 完成所有工作,尤其是在运行企业应用程序时(并且您有许多并发连接需要相同的资源)。

如果你特别想更新数据库中的对象(例如,将汽车颜色设置为绿色),我建议使用类似的 SQL

UPDATE CAR SET COLOR = 'GREEN';

(注意我没有使用 WHERE 子句)。这更新了 ALL CAR 表,我不需要拉出所有 Car 对象,调用 setColor("Green") 并进行更新。

事后看来,我想说的是应用工程知识。您的 DAO 应该简单地进行快速选择、更新等,并让 RDBMS 处理所有 SQL“工作”。

关于java - 我应该总是从数据库中检索完整的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10878994/

相关文章:

java - Type<Type> 叫什么?

java - 如何提高AWS Lambda服务的性能?

mysql - 自动生成数据库图 MySQL

database-design - bool 表达式的数据模型

java - 实体参数不能被Root的get方法使用

java - 从 1.6 升级到 Java 1.7 引入的 SSL 错误

C# 实现过程 block

javascript - 对象不继承原型(prototype)函数

oop - 对象之间的消息传递——如何引用目标对象?

database - 可扩展数据库架构