繁体   English   中英

使用Spring MVC修改数据库对象列表的正确方法是什么?

[英]What is a proper way to modify a list of DB Objects using Spring MVC?

使用spring MVC模型并且没有任何ORM解决方案,我应该如何在不增加数据库查询的情况下处理大量的数据库对象?


研究方向

音轨1

  • 步骤1:使用DAO SELECT对象,然后使用RowMapper将它们放入(大) List
  • 步骤2:在Java相关服务中处理我的对象。
  • 步骤3:在(n-big) List上循环以在数据库中执行n个简单的UPDATE

对n个对象的查询: 1 + n

音轨2

在DAO中编写一个SQL查询,该查询直接更新所有相应的对象而无需提取它们。

对n个对象的查询: 1

思想

由于第2轨的效率似乎更高,它也似乎与Spring MVC模型完全相反,因为我的服务将趋于空白,而DAO则会趋于扩展。

也许有一种通用的方法可以在不增加查询的情况下对数据库中的Java对象List执行UPDATE


简单的情况

给定此表:

+----+---------+------+
|           MY_OBJECT |
+----+---------+------+
| ID | BOOLEAN | DATE |
+----+---------+------+
|  0 |       0 | NULL |
|  1 |       1 | NULL |
|  2 |       0 | NULL |
|  3 |       1 | NULL |
|  4 |       1 | NULL |
+----+---------+------+

我有一个MyObjectDaoMyObjectService

对于所有将boolean设置为true对象,我想将DATE设置为SYSDATE()

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

这通常由ORM层处理。

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

如果您有自己的家庭旋转ORM层,则可以执行任何您想做的事情,但是作为对您的论据的重视,我会说:

  1. 服务应该只知道它想要的分页。
  2. 如何执行此操作应位于服务下方。

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

  • 使用DAO以通用方式从数据库中提取数据
  • 通过服务/业务层按需要编辑对象
  • 将对象传输到DAO以进行一般的batchUpdate

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM