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>
๋ฐฉ๋ฒ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