簡體   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