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

时间:2016-05-04 09:27:02

标签: java mysql spring-mvc

问题

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

研究跟踪

第1轨道

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

查询n个对象: 1 + n

第二轨道

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

查询n个对象: 1

思想

由于第2轨似乎效率更高,它似乎也直接违反了Spring MVC模型,因为我的服务往往会变空,而我的DAO将会扩展。

也许有一种通用的方法在数据库的Java UPDATE对象上执行List而不会增加查询?

简单案例

鉴于此表:

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

我有一个MyObjectDao和一个MyObjectService

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

如果它是带有查询的完整DAO,或者DAO应该检索对象,服务是否编辑它们然后DAO会更新它们?

2 个答案:

答案 0 :(得分:1)

这通常由ORM层处理。

如果您正在使用Hibernate(其他ORM可用),那么我会委托给它。

如果你有自己的家庭旋转ORM层,你可以做任何你想做的事,但作为你的论点的重点,我会说:

  1. 服务应该只知道它想要的分页。
  2. 如何实施此功能应位于服务之下。

答案 1 :(得分:0)

我做了一些研究,并对这个问题提出了很多想法。我从我的工作中推断出,在大多数情况下,过程应该是:

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

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