Upsert란 UPDATE + INSERT를 합친 단어이다.
중복되는 값이 있으면 UPDATE, 없으면 INSERT 하는 쿼리라고 생각하면 된다.
Mybatis에서 다중 INSERT 하는 방법은 다음과 같다.
<insert id="insertData" parameterType="java.util.List">
INSERT 테이블명 ( name, age ) VALUES
<foreach collection="list" item="alias" separator=",">
( #{alias.name} , #{alias.age})
</foreach>
</insert>
만약, INSERT 시 PK(=name)가 중복된 경우에 특정 칼럼만 UPDATE 하고 싶다면 ON DUPLICATE KEY UPDATE를 사용하면 된다.
<insert id="insertData" parameterType="java.util.List">
INSERT 테이블명 ( name, age ) VALUES
<foreach collection="list" item="alias" separator=",">
( #{alias.name} , #{alias.age} )
</foreach>
ON DUPLICATE KEY UPDATE
age = VALUES (age)
</insert>
ON DUPLICATE KEY UPDATE는 INSERT 먼저하고 중복된 키가 있으면 UPDATE 한다.
foreach에서 사용한 alias는 < foreach > 안에서만 유효한 지역변수라서 바깥에서 쓰려면 VALUES(칼럼명)를 사용해줘야 한다.
삽질 로그
둘 다 같음 ^^..
<foreach collection="list" item="alias" separator=",">
( #{alias.name} , #{alias.age})
</foreach>
<foreach collection="list" item="alias" open="(" separator="," close=")">
#{alias.name} , #{alias.age}
</foreach>
참고 링크
- http://opinionminer.blogspot.com/2012/10/mybatis-insert-multiple-rows-if-doesnt.html
- https://brush-describr.tistory.com/entry/MySQL-ON-DUPLICATE-KEY-UPDATE-%EC%A4%91%EB%B3%B5%EC%97%86%EC%9D%B4-%EB%A0%88%EC%BD%94%EB%93%9C-%EB%B0%94%EA%BF%94%EC%B9%98%EA%B8%B0%EB%8C%80%EB%9F%89-%EB%A0%88%EC%BD%94%EB%93%9C-MyBatis-foreach%EB%AC%B8
728x90
'🏰 Back-end' 카테고리의 다른 글
[Github] OAuth 앱 권한 부여 방법 (0) | 2024.04.03 |
---|---|
[SonarQube] Webhook Additional parameters (소나큐브 비동기 호출 사용자 정의 파라미터 추가) (0) | 2023.12.14 |
[SonarQube] SonarQube 내장 DB (H2) 접속방법 (0) | 2023.08.14 |
[SonarQube] Window cmd에서 소나큐브 프로젝트 바인딩 명령어 입력 (0) | 2023.08.07 |
[SonarQube] Local 환경에서 정적분석 돌려보기 (SonarQube 설치 및 구동) (0) | 2023.07.09 |
댓글