mybatis를 사용하여 데이터베이스에 dto를 저장하려고 한다.
이때 PK값은 저장 될때 자동으로 생성되게 설정한 상태이다. 데이터 저장 후 서비스단에서 PK값을 바로 사용해야하는 상황이면 어떻게 할까?
먼저 생각난 방법은 다시 데이터베이스에 접근해서 PK를 select하는 것이다. 그러나 이 방법은 데이터베이스에 총2번 접근해야하므로 상당히 비효율적이다.
다행히도 아주 쉬운 방법이 있다.
그냥 DTO에서 바로 getUserNo로 꺼내 쓰면 되는 것이다
mybatis에서 dto에 자동으로 저장이 된다~
public class UserDto {
private Long userNo; //auto-generated PK
private String id;
private String phone;
private String social; //소셜로그인 중류
private LocalDateTime regTime; //최근 로그인 시간
}
<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>
userDto = UserDto.builder()
.id(id)
.phone(sha256.encrypt(phone)
.social(social)
.regTime(LocalDateTime.now())
.build();
userRepository.login(userDto); //회원가입
userDto.getUserNo(); //바로 꺼내 쓸 수 있음