Spring/Skill
[MyBatis] upsert (insert + update) mapper 작성법
31daylee
2024. 3. 18. 14:16
728x90
📌 Upsert 란?
Upsert는 insert와 update , 삽입과 변경을 동시에 하는 것을 지칭하는 말이다.
MyBatis에서 upsert를 하기 위해서는 <insert> 문으로 작성을 해야하며, 일정 규칙을 따라야 한다.
- <insert>를 사용한다.
- INSERT INTO 테이블명 ( ) 의 괄호문에 컬럼명을 꼭 기재해야 한다.
- ON DUPLICATE KEY UPDATE 라는 문법통해 Update(수정) 진행한다.
- ON DUPLICATE KEY UPDATE 문을 사용하기 위해서 PK(Primary Key) 가 반드시 존재해야 한다.
- PK, Uniq 의 값을 기준으로 insert 혹은 update문이 진행되는 구조라 모든 컬럼명이 존재해야 한다.
📌 Upsert 작성법
MyBatis에서 Upsert 작성하기
<insert id="사용아이디" parameterType="타입">
INSERT INTO 테이블명
(PK컬럼1
, 컬럼2
, 컬럼3
)
VALUES
(#{PK값}
,#{컬럼2값}
,#{컬럼3값}
)
ON DUPLICATE KEY UPDATE
컬럼2 = VALUES(컬럼2값)
,컬럼3 = VALUES(컬럼3값)
</insert>
ON DUPLICATE KEY UPDATE 이후 PK관련 컬럼과 값은 존재하지 않는다.
PK의 여부(혹은 Uniq)에 따라 존재하면 Update의 구문이 실행되며, 존재하지 않는 경우에는 생성 쿼리문을 실행하게 된다.
관련 샘플 코드
<insert id="upsertUser" parameterType="map">
INSERT INTO USER
(user_id
, user_num
, user_name
, user_engname
, email_1
)
VALUES
(#{user_id}
,#{user_num}
,#{user_name}
,#{user_engname}
,#{email_1}
)
ON DUPLICATE KEY UPDATE
user_name = VALUES(user_name)
,user_engname = VALUES(user_engname)
,email_1 = VALUES(email_1)
</insert>
<참고자료>
728x90