Java 使用SpringMVC修改DB对象列表的正确方法是什么? 问题:
使用SpringMVC模型,在没有任何ORM解决方案的情况下,如何在不增加数据库查询的情况下处理大量数据库对象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模型
研究轨道 轨道1
- 步骤1:
选择带有DAO的对象,并使用
行映射器将它们放入(大的)
列表中
- 步骤2:在Java中处理关联服务中的我的对象
- 步骤3:循环(n-big)
在数据库中执行n个简单的列表
更新
列表进行更新
,而无需乘以查询
简单案例
鉴于此表:
+----+---------+------+
| 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”语句。从您的“不乘以数据库查询”来看,您可能想要前者。