Development/DB
[MyBatis] MySQL의 DUPLICATE
루루지
2021. 10. 27. 14:16
반응형
MySql에서의 ON DUPLICATE는 오라클의 MERGE INTO와 비슷하다.
insert시 키값이 중복되면 해당 키값에 대해 update가 동작하게 된다.
INSERT INTO TEST (TITLE, SUBJECT, CONTENT) VALUES (#{title}, #{subject}, #{content})
ON DUPLICATE KEY UPDATE STATE = 1, MOD_TSP = NOW();
# 중복되는 키가 존재할 경우, state=1, mod_tsp는 현재시간으로 업데이트
다중 insert시 update처리 foreach
아래에서 주목해야할 점은 values 부분이다
ON DUPLICATE KEY UPDATE VALUE = values(value)
foreach로 컬렉션 안에서는 item. 으로 루프돌려서 값을 가져오는데
duplicate update에서는 item이 지역변수라 사용 불가능하다.
이럴땐, values()로 가져올 수 있다.
<insert id="insertOrUpdate" parameterType="param">
INSERT INTO TABLE (ID, TYPE, VALUE)
VALUES
<foreach collection="boards" item="item" separator=",">
(#{id}, #{item.type}, #{item.value})
</foreach>
ON DUPLICATE KEY UPDATE VALUE = values(value)
</insert>