Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Swagger
- 유효성검사
- 스프링부트실전가이드
- 제로베이스
- 엔티티 설계
- DAO 연동 컨트롤러 서비스 설계
- spring
- #devops #terraform #state
- 개발자
- auditing
- 리포지토리 인터페이스
- DAO 설계
- 백엔드
- 백엔드공부
- 제로베이스 #백엔드 #Java #Spring #개발자 #백엔드공부 #백엔드 스쿨
- 프로젝트 생성
- MariaDB
- 스프링 부트 핵심 가이드
- JPA
- validated
- 인텔리제이
- ORM
- 데이터베이스 연동
- 백엔드스쿨
- Java
Archives
- Today
- Total
JeongJin's Blog
MyBatis 사용 시 Bulk insert 시 PK 추출 주의할 사항 본문
Mybatis를 이용하여 insert 쿼리 수행 시 방금 Insert 된 PK를 가져오기 위해 insert 후 select 하는 로직을 구현해 본 경험이 있을 것이다.
하지만 insert 태그 속성 중에 "useGeneratedKeys", "keyProperty" 를 이용하면 select를 할 필요가 없다.
<insert id="registerEdocProperty"
parameterType="com.domain.Edoc"
useGeneratedKeys="true"
keyProperty="edocPropertySeq">
INSERT INTO [EdocProperty] (
[edocSeq], [propertyName], [propertyValue]
)
VALUES (
#{edocSeq}, #{propertyName}, #{propertyValue}
)
</insert>
- Insert 가 수행되면 Member 객체에 seq 변수에 자동으로 방금 insert된 PK 값이 저장된다.
- 단 AutoIncrement 인 PK 여야 한다.
- 그러나 List 형태의 데이터를 insert 하는 경우 Batch 방식으로 한번에 넣기 위해 아래와 같이 foreach 태크를 이용하여 구현하는 경우도 있다.
- 결과는 동일하게 Insert 되지만 PK 를 써야하는 상황에서는 심각한 문제가 있다.
<insert id="registerEdocProperty"
parameterType="com.domain.Edoc"
useGeneratedKeys="true"
keyProperty="edocPropertySeq">
INSERT INTO [EdocProperty] (
[edocSeq], [propertyName], [propertyValue]
)
VALUES
<foreach item="item" collection="list" separator=",">
(
#{edocSeq}, #{propertyName}, #{propertyValue}
)
</foreach>
</insert>
- 위의 이미지를 보면 알 수 있듯이 edocPropertySeq 가 pk 인데 0 번째 인덱스의 PK 에 3 이 들어가고 나머지는 0으로 셋팅되는 현상을 발견했다.
결론은, PK를 사용해야 하는 경우 <foreach> 구문을 이용해서 Batch성으로 insert를 하게 되면 pk 값이 제대로 셋팅이 안되기 때문에 mapper를 여러번 호출하여 PK 값이 해당 객체에 셋팅되도록 구현하자!!
'백엔드 > Mybatis' 카테고리의 다른 글
org.springframework.jdbc.UncategorizedSQLException 발생 시 (0) | 2024.05.03 |
---|---|
jdbc type (0) | 2024.04.08 |
Mybatis collection 사용하기 (0) | 2024.01.17 |
Mybatis PK 추출 방법 (0) | 2024.01.15 |
MyBatis 사용 시 Entity 에서 lombok 사용 시 주의 할 점 (0) | 2024.01.05 |