Java 使用SpringMVC修改DB对象列表的正确方法是什么? 问题:

Java 使用SpringMVC修改DB对象列表的正确方法是什么? 问题:,java,mysql,spring-mvc,Java,Mysql,Spring Mvc,使用SpringMVC模型,在没有任何ORM解决方案的情况下,如何在不增加数据库查询的情况下处理大量数据库对象 研究轨道 轨道1 步骤1:选择带有DAO的对象,并使用行映射器将它们放入(大的)列表中 步骤2:在Java中处理关联服务中的我的对象 步骤3:循环(n-big)列表在数据库中执行n个简单的更新 查询n个对象:1+n 轨道2 在DAO中编写一个SQL查询,直接更新所有相应的对象,而不提取它们 查询n个对象:1 思想 由于第2轨的效率似乎要高得多,它似乎也直接与SpringMVC模型

使用SpringMVC模型,在没有任何ORM解决方案的情况下,如何在不增加数据库查询的情况下处理大量数据库对象


研究轨道 轨道1
  • 步骤1:
    选择带有DAO的对象,并使用
    行映射器将它们放入(大的)
    列表中
  • 步骤2:在Java中处理关联服务中的我的对象
  • 步骤3:循环(n-big)
    列表
    在数据库中执行n个简单的
    更新
查询n个对象:1+n

轨道2 在DAO中编写一个SQL查询,直接更新所有相应的对象,而不提取它们

查询n个对象:1

思想 由于第2轨的效率似乎要高得多,它似乎也直接与SpringMVC模型背道而驰,因为我的服务将趋向于空,我的DAO将趋向于扩展

也许有一种通用的方法可以对数据库中对象的Java
列表进行
更新
,而无需乘以查询


简单案例 鉴于此表:

+----+---------+------+
|           MY_OBJECT |
+----+---------+------+
| ID | BOOLEAN | DATE |
+----+---------+------+
|  0 |       0 | NULL |
|  1 |       1 | NULL |
|  2 |       0 | NULL |
|  3 |       1 | NULL |
|  4 |       1 | NULL |
+----+---------+------+
我有一个
MyObjectDao
和一个
MyObjectService

对于所有布尔值为
true
的对象,我想将
DATE
设置为
SYSDATE()


应该是带有查询的完整DAO,还是DAO检索对象,服务编辑对象,然后DAO更新对象

这通常由ORM层处理

如果您使用的是Hibernate(还有其他可用的ORM),那么我将委托您使用它

如果你有自己的主页,你可以做任何你想做的事,但作为你论点的权重,我想说:

  • 服务应该只知道它想要的分页
  • 如何实现这一点应该放在服务下面

  • 我做了一些研究,对这个问题做了很多思考。我从工作中得出的结论是,在大多数情况下,流程应该是:

    • 使用DAO以通用方式从数据库中提取数据
    • 使用服务/业务层按需要的方式编辑对象
    • 将对象传输到DAO以执行一般的批处理更新

    我缺少的关键元素是批处理更新。如果没有它,更新大量的
    元素列表将需要几分钟,这是不可接受的。最大的区别不是执行的查询数量,而是它们如何传输到数据库,从而避免在批量更新情况下多次使用网络层。

    我没有使用ORM,我编辑了这篇文章以添加该细节。也就是说,答案并不能真正解决“谁应该做什么”的问题。简单情况:给定一个对象列表,该列表在数据库中具有
    布尔值和
    日期。我想将
    SYSDATE()
    设置为所有布尔值为
    true
    的对象。是带有查询的完整DAO,还是DAO检索对象,服务编辑对象,然后DAO更新对象?这取决于具体情况。如果您想避免使用大量复杂的SQL语句,那么就在Java对象级别调出数据并对其进行操作。如果您喜欢使用SQL,那么只需向数据库中发出SQL“updatewhere”语句。从您的“不乘以数据库查询”来看,您可能想要前者。