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

newxy DAO update 方法語義解析:主鍵判斷決定 Insert 或 Update

     編輯:Java 相關知識

核心邏輯

newxy 框架 DBM.update(Object dto) 方法採用 **「主鍵存在性」** 判斷操作類型:

  • Insert:DTO **不包含主鍵值** 或 **主鍵值在表中不存在**。
  • Update:DTO **包含主鍵值** 且 **該值在表中已存在**。

三種典型業務場景

場景 1:新增頁面 (空白表單)

<nhtml:form ...> ... </nhtml:form>
  • 無前置查詢,標籤自動實例化空 formBean。
  • 用戶填寫提交 → 主鍵為空 → 執行 Insert。
  • 若用戶手動填入已存在主鍵 → 執行 Update (可能拋唯一鍵衝突)。

場景 2:點擊「新增」按鈕

  • <logic:action1/> 清空 formBean 的 values Map (保留屬性定義)。
  • 表單顯示空白 → 用戶填寫提交 → 主鍵為空 → 執行 Insert。

場景 3:點擊「編輯」按鈕

  • <logic:action1/> 將選中記錄 put 入 formBean.values,**包含主鍵鍵值對**。
  • 表單回顯數據 → 用戶修改提交 → 主鍵非空且存在 → 執行 Update。

代碼範例

1. 新增 (不設主鍵,自動生成)

BaseDAO dao = new BaseDAO();
DynaDto dto = new DynaDto();
dto.set_table("table1");
dto.set("field1", "值1");
dto.set("field2", "值2");
// 不設 id,框架自動取最大值+1
Object result = dao.update(dto);
// result != null 表示 Insert,可獲取自動生成主鍵
if (result != null) {
    Object newId = ((DynaDto) result).get("id");
}

2. 新增 (指定主鍵)

dto.set("id", "100"); // 手動指定
Object result = dao.update(dto);
// 若 100 不存在 → Insert,result != null
// 若 100 已存在 → Update,result == null

3. 更新 (必須設主鍵)

dto.set_table("table1");
dto.set("id", "100"); // 必須存在
dto.set("field1", "新值1");
Object result = dao.update(dto);
// result == null 表示 Update

返回值判斷邏輯

操作result 返回含義
Insert非 null (包含生成主鍵的 DynaDto)可獲取自動生成主鍵
Updatenull無額外信息

注意事項

  • 主鍵策略:框架默認「最大值+1」,高併發下易衝突,生產建議使用 Sequence/Identity/UUID。
  • 事務邊界:update 不自動開啟事務,批量操作需外層控制。
  • 樂觀鎖:框架未內建,需自行添加版本欄位檢查。
  • 異常處理:捕獲 Exception,檢查 SQLException 錯誤碼區分唯一鍵衝突、外鍵違規等。

總結

newxy update() 以 **「主鍵是否存在於表中」** 為唯一判斷標準,實現「同一方法雙語義」。開發者只需控制 formBean 中主鍵的有無與值,即可在新增/編輯頁面複用同一提交邏輯,簡化 Controller 代碼。理解此機制,是正確使用 newxy 進行 CRUD 開發的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved