[MyBatis] Oracle ์‹œํ€€์Šค ์ƒ์„ฑ ๋ฐฉ๋ฒ• (useGeneratedKeys)

2025. 1. 23. 10:52ยท๐Ÿ’พ DataBase
728x90
728x90

MyBatis์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ useGeneratedKeys๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋ณธ ํ‚ค(PK)๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Oracle์˜ ๊ฒฝ์šฐ useGeneratedKeys ์‹œํ€€์Šค๋ฅผ ์ด์šฉํ•ด ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์–ด SELECT๋ฅผ ํ†ตํ•ด ์‹œํ€€์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

๊ธฐ์กด ์ฝ”๋“œ : useGeneratedKeys ์‚ฌ์šฉ

<insert id="save" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO INTERN_TASK.REPORT ("service_code", "name", "recognition_date", "occurrence_date",
                                        "impact_date", "restore_date", "impact_system", "impact_url", "situation",
                                        "loss_cost", "status", "created_at", "updated_at", "updated_by",
                                        "metadata_defect_type", "metadata_defect_size", "metadata_defect_level",
                                        "metadata_defect_aspect")
        VALUES (#{serviceCode, jdbcType=VARCHAR}, #{name}, #{recognitionDate, jdbcType=DATE},
                #{occurrenceDate, jdbcType=DATE},
                #{impactDate, jdbcType=DATE}, #{restoreDate, jdbcType=DATE}, #{impactSystem}, #{impactUrl},
                #{situation},
                #{lossCost}, #{status}, TO_DATE(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), #{updatedAt, jdbcType=DATE},
                #{updatedBy, jdbcType=NUMERIC},
                #{metadataDefectType}, #{metadataDefectSize}, #{metadataDefectLevel},
                #{metadataDefectAspect})
    </insert>

์‹œํ€€์Šค ํ˜ธ์ถœ๋˜์ง€ ์•Š์•„ NULL ์‚ฝ์ž…๋˜์–ด ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

๋ฐฉ๋ฒ•1. VALUES์— ์ง์ ‘ ์‹œํ€€์Šค ์‚ฌ์šฉ

์‹œํ€€์Šค๋ฅผ VALUES์— ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

INSERT INTO REPORT (id, service_code, name, ...)
VALUES (REPORT_SEQ, #{serviceCode, jdbcType=VARCHAR}, ...);

์‹œํ€€์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์‹œํ€€์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•จ

CREATE SEQUENCE REPORT_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
SELECT SEQUENCE_NAME FROM USER_SEQUENCES;

 

 

๋ฐฉ๋ฒ•2. keyGenerator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

useGeneratedKeys ๋Œ€์‹  keyGenerator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œํ€€์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

  • selectKey : MyBatis์—์„œ INSERT ์ „์— ์‹คํ–‰๋˜์–ด ์‹œํ€€์Šค ๊ฐ’(INTERN_TASK_SEQ.NEXTVAL)์„ Java ๊ฐ์ฒด ๋‚ด id ํ•„๋“œ์— ์„ค์ •ํ•œ๋‹ค.
  • useGeneratedKeys : ๋น„ํ™œ์„ฑํ™”๋กœ ์„ค์ •
  • keyProperty : MyBatis๊ฐ€ ์‹œํ€€์Šค ๊ฐ’์„ ์„ค์ •ํ•  Java ๊ฐ์ฒด์˜ ํ•„๋“œ๋ช…
  • keyColumn : DB์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ํ‚ค ์ปฌ๋Ÿผ๋ช…
<insert id="save" keyProperty="id" keyColumn="id" useGeneratedKeys="false">
    <selectKey keyProperty="id" resultType="long" order="BEFORE">
        SELECT REPORT_SEQ.NEXTVAL FROM DUAL
    </selectKey>
    INSERT INTO INTERN_TASK.REPORT (
        id,
        service_code,
        name,
        recognition_date,
        occurrence_date,
        impact_date,
        restore_date,
        impact_system,
        impact_url,
        situation,
        loss_cost,
        status,
        created_at,
        updated_at,
        updated_by,
        metadata_defect_type,
        metadata_defect_size,
        metadata_defect_level,
        metadata_defect_aspect
    ) VALUES (
        #{id},
        #{serviceCode, jdbcType=VARCHAR},
        #{name, jdbcType=VARCHAR},
        #{recognitionDate, jdbcType=DATE},
        #{occurrenceDate, jdbcType=DATE},
        #{impactDate, jdbcType=DATE},
        #{restoreDate, jdbcType=DATE},
        #{impactSystem, jdbcType=VARCHAR},
        #{impactUrl, jdbcType=VARCHAR},
        #{situation, jdbcType=VARCHAR},
        #{lossCost, jdbcType=NUMERIC},
        #{status, jdbcType=NUMERIC},
        SYSDATE,
        #{updatedAt, jdbcType=DATE},
        #{updatedBy, jdbcType=NUMERIC},
        #{metadataDefectType, jdbcType=VARCHAR},
        #{metadataDefectSize, jdbcType=VARCHAR},
        #{metadataDefectLevel, jdbcType=VARCHAR},
        #{metadataDefectAspect, jdbcType=VARCHAR}
    )
</insert>
728x90
320x100
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ’พ DataBase' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Redis] ๋ ˆ๋””์Šค(Redis)๋ž€?  (0) 2025.03.11
[MyBatis/Oracle] Sequence๋ฅผ ํฌํ•จํ•œ Bulk Insert(๋‹ค์ค‘ ํ–‰ ์‚ฝ์ž…)  (0) 2025.02.07
[ADSP] ๋ฐ์ดํ„ฐ๋ถ„์„ ์ค€์ „๋ฌธ๊ฐ€ <2๊ณผ๋ชฉ> ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐํš - 02์žฅ ๋ถ„์„ ๋งˆ์Šคํ„ฐํ”Œ๋žœ  (0) 2024.10.21
[ADSP] ๋ฐ์ดํ„ฐ๋ถ„์„ ์ค€์ „๋ฌธ๊ฐ€ <2๊ณผ๋ชฉ> ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐํš - 01์žฅ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐํš์˜ ์ดํ•ด  (0) 2024.10.19
[ADSP] ๋ฐ์ดํ„ฐ๋ถ„์„ ์ค€์ „๋ฌธ๊ฐ€ <1๊ณผ๋ชฉ> ๋ฐ์ดํ„ฐ ์ดํ•ด - 02์žฅ ๋ฐ์ดํ„ฐ์˜ ๊ฐ€์น˜์™€ ๋ฏธ๋ž˜  (0) 2024.10.13
'๐Ÿ’พ DataBase' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Redis] ๋ ˆ๋””์Šค(Redis)๋ž€?
  • [MyBatis/Oracle] Sequence๋ฅผ ํฌํ•จํ•œ Bulk Insert(๋‹ค์ค‘ ํ–‰ ์‚ฝ์ž…)
  • [ADSP] ๋ฐ์ดํ„ฐ๋ถ„์„ ์ค€์ „๋ฌธ๊ฐ€ <2๊ณผ๋ชฉ> ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐํš - 02์žฅ ๋ถ„์„ ๋งˆ์Šคํ„ฐํ”Œ๋žœ
  • [ADSP] ๋ฐ์ดํ„ฐ๋ถ„์„ ์ค€์ „๋ฌธ๊ฐ€ <2๊ณผ๋ชฉ> ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐํš - 01์žฅ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐํš์˜ ์ดํ•ด
mxnxeonx
mxnxeonx
"์•„, ์ด๊ฑฐ ๋ญ์˜€๋”๋ผ"๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ์œ„ํ•œ ์ผ๊ธฐ์žฅ.
  • mxnxeonx
    MJ's Development Diary
    mxnxeonx
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (154)
      • ๐Ÿ’ป Language (43)
        • Java : ์ž๋ฐ” (18)
        • Python : ํŒŒ์ด์ฌ (9)
        • ROS : ๋กœ๋ด‡์‹œ์Šคํ…œ (9)
        • Android : ์•ˆ๋“œ๋กœ์ด๋“œ (4)
        • JavaScript : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ (2)
      • ๐ŸŒ Environment (19)
        • IDE : ํ†ตํ•ฉ๊ฐœ๋ฐœํ™˜๊ฒฝ (9)
        • Virtual : ๊ฐ€์ƒํ™˜๊ฒฝ (10)
      • โš™ Framework (12)
        • Vue-๋ทฐ (3)
        • Spring-์Šคํ”„๋ง (7)
      • ๐Ÿ’พ DataBase (18)
      • ๐ŸŒŒ OS (36)
        • Linux-๋ฆฌ๋ˆ…์Šค (36)
      • ๐Ÿ’ฌ CI · CD (7)
        • Git : ๊นƒ (7)
      • ๐Ÿ“ƒ ETC (3)
      • ๐Ÿค– AI (4)
  • ๋งํฌ

    • GitHub
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
mxnxeonx
[MyBatis] Oracle ์‹œํ€€์Šค ์ƒ์„ฑ ๋ฐฉ๋ฒ• (useGeneratedKeys)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”