[Mybatis] insert한 컬럼의 PK값을 리턴하기(auto generated)

GyeongEun Kim·2023년 2월 11일
0

mybatis를 사용하여 데이터베이스에 dto를 저장하려고 한다.
이때 PK값은 저장 될때 자동으로 생성되게 설정한 상태이다. 데이터 저장 후 서비스단에서 PK값을 바로 사용해야하는 상황이면 어떻게 할까?

먼저 생각난 방법은 다시 데이터베이스에 접근해서 PK를 select하는 것이다. 그러나 이 방법은 데이터베이스에 총2번 접근해야하므로 상당히 비효율적이다.

다행히도 아주 쉬운 방법이 있다.
그냥 DTO에서 바로 getUserNo로 꺼내 쓰면 되는 것이다
mybatis에서 dto에 자동으로 저장이 된다~

DTO

public class UserDto {
    private Long userNo; //auto-generated PK
    private String id;
    private String phone;
    private String social; //소셜로그인 중류
    private LocalDateTime regTime; //최근 로그인 시간
   
}

Mapper

 <insert id="login"
            parameterType="UserDto"
            useGeneratedKeys="true" keyProperty = "userNo">
        insert into User (id, phone, social, regTime) values
        (#{userDto.id}, #{userDto.phone}, #{userDto.social}, #{userDto.regTime});
 </insert>

Service

userDto = UserDto.builder()
                    .id(id)
                    .phone(sha256.encrypt(phone)
                    .social(social)
                    .regTime(LocalDateTime.now())
                    .build();

userRepository.login(userDto); //회원가입
userDto.getUserNo(); //바로 꺼내 쓸 수 있음
profile
내가 보려고 쓰는 글

0개의 댓글