[Mybatis] DB에 INSERT 시 ID 값 가져오기

peace w·2024년 11월 24일

Mybatis를 너무 오랜만에 써봐서 멍청 이슈가 있었다...

mapper.xml

mapper.xml에서 useGeneratedKeys="true", keyProperty="" 를 추가해준다.
keyProperty는 가져올 ID의 프로퍼티를 적어주면 된다.

<insert id="createCard" parameterType="SaveCardDTO" useGeneratedKeys="true" keyProperty="cardId">
        INSERT INTO card(user_id, store_id, food_type_id)
        VALUES (#{userId}, #{storeId}, #{foodTypeId})
</insert>

DTO

DTO에는 키프로퍼티가 반드시 포함되어있어야한다.

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class SaveCardDTO {
    private Integer cardId; // keyproperty
    private Integer userId;
    private String storeId;
    private Integer foodTypeId;
}

올바른 예

값을 insert 후에, 생성된 객체에서 get프로퍼티() 를 통해서 값을 가져올 수 있다.

cardService.createCard(newCard);
System.out.println("cardId : " + newCard.getCardId());

잘못된 예

insert 이후의 int 값은 useGeneratedKeys 옵션에 따라서가 아닌, 결과 여부이다.(0 혹은 1)

Integer cardId = cardService.createCard(newCard);
System.out.println("cardId : " + cardId);

이렇게 하고 실행하니 계속 똑같은 결과만 storeId가 1로만 나왔다 (당연함)


참고

https://wwwnghks.tistory.com/170

profile
더 성장하자.

0개의 댓글