首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

關聯對象排序設計:通過順序字段實現拖拽排序與上下移動邏輯

     編輯:Java 綜合教學

關聯對象排序設計:通過順序字段實現拖拽排序與上下移動邏輯

當對象 A 關聯多個對象 B,需支持前端拖拽或上下移動按鈕調整 B 的順序。最簡單通用的方案是在關聯表中增加順序字段 ordernum。

設計方案

  1. 字段定義:關聯表(如 OBJECTGROUPROBJECT)增加 ordernum BIGINT,初始值可用 System.currentTimeMillis() 毫秒時間戳,保證唯一且有序。
  2. 順序調整:上移/下移操作本質是交換兩條記錄的 ordernum 值;拖拽排序則批量更新受影響記錄的 ordernum(可重新分配連續序號)。
  3. 查詢排序:SELECT ... ORDER BY OGRO.ORDERNUM ASC 即可獲得正確順序。

SQL 示例

-- 查詢某組織下所有資產,按自定義順序
SELECT A.*
FROM ASSET A
JOIN OBJECTGROUPROBJECT OGRO ON A.ASSETID = OGRO.OBJECTID
WHERE OGRO.OGID = 20160401123045006
ORDER BY OGRO.ORDERNUM;

優缺點分析

優點缺點
實現極簡,無需額外表結構大量數據批量調序需更新多行
支持任意插入/移動/刪除時間戳初始值間隙大,長期調整後可能需重排
兼容所有關係型數據庫高併發調序需行鎖或樂觀鎖防衝突

進階優化

  • 使用 DECIMAL 或浮點數作為 ordernum,插入時取中間值(如 1 和 2 之間插 1.5),減少全量更新。
  • 引入 version 樂觀鎖字段,防止併發修改丟失更新。
  • 前端使用 SortableJS 等庫實現拖拽,批量提交新順序數組,後端單事務更新。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved