웹 개발/[KLOZ] 웹 프로젝트

[WebOrder] IBSheet 셀 내 데이터 수정하기 (ON DUPLICATE KEY UPDATE)

cha430 2025. 9. 4. 11:01

 

이전 OrderManager 프로젝트에서는 IBSheet 에 출력하는 데이터들이 모두 DB의 필수값들이었기 때문에

시트 내 값을 수정할 때 UPDATE 문을 쓰면 됐다.

 

지금은 상황이 다르다.

IBSheet 에 출력하는 데이터는 DB 내 필수값(NOT NULL) + 선택값이 함께 있으며

심지어 NOT NULL 인 데이터를 시트에 출력하지 않는 것도 있다.

그래서 INSERT INTO VALUES ON DUPLICATE KEY UPDATE 를 쓰면 된다.

 

대신 이 때는 DB에 필수값들은 null 일 수가 없으므로  NOT NULL 인 컬럼들은 모두 시트에 숨김 행으로 추가해야한다.

(아니었다. select 쿼리로 조회해서 서버에서 보낸 건 IBSheet가 가지고있긴하다. 그냥 써도 됨.)

 

Cols: [
  {Header: "품목코드", Name: "itemSeq", Type: "Int", Hidden: 1},
  {Header: "파일시퀀스", Name: "fileSeq", Type: "Int", Hidden: 1},
  {Header: "파일시리얼", Name: "fileSerl", Type: "Int", Hidden: 1},
  {Header: "품목자산분류", Name: "itemType", Type: "Int", Hidden: 1},
Events: {
    onRenderFirstFinish: function (evtParam) {
        const sheet = evtParam.sheet;
        sheet.hideCol("fileSeq");
        sheet.hideCol("fileSerl");
        sheet.hideCol("itemSeq");
        sheet.hideCol("itemType");

 

 

꼭 INSERT 해주어야하는 값들을 INSERT INTO 에 적고

ON DUPLICATE KEY UPDATE 에는 이번에 수정해서 추가할 컬럼들을 적어주면 된다.

<insert id="saveItem" parameterType="dev.kloz.weborder.admin.item.dto.ItemDto$Item">
    INSERT INTO tbl_item_master (
        item_seq,
        item_name,
        item_no,
        item_spec,
        item_type,
        item_unit,
        item_eng_name,
        update_user_seq,
        update_date,
        apply_start_date,
        apply_end_date,
        reg_user_seq,
        reg_date
    )
    VALUES (
            #{itemSeq},
            #{itemName},
            #{itemNo},
            #{itemSpec},
            #{itemType},
            #{itemUnit},
            #{itemEngName},
            #{userSeq},
            CURRENT_TIMESTAMP(),
            #{applyStartDate},
            #{applyEndDate},
            #{userSeq},
            #{regDate}
           )
        ON DUPLICATE KEY UPDATE
             item_name = #{itemName},
             item_no = #{itemNo},
             item_spec = #{itemSpec},
             item_eng_name = #{itemEngName},
             update_user_seq = #{userSeq},
             update_date = CURRENT_TIMESTAMP()
</insert>