🍳

초보 개발자의 일상

Java/SpringBoot

[MyBatis] useGeneratedKeys, keyProperty

dev.jelee 2024. 10. 28. 01:35

생각

관리자 페이지 구현을 하는 수업을 듣는 도중에 <insert>구문에서 useGeneratedKeys="true" keyProperty="id" 이라는 코드를 보았다. 왜 이것을 사용하는지 정리를 해놓으면 좋을 거 같아서 이렇게 글을 작성한다.


useGeneratedKeys="true" keyProperty="id"

  • MyBatis에서 데이터베이스의 자동 생성 키(auto-increment key)를 사용할 때 설정하는 속성

 

useGeneratedKeys="true"

  • MyBatis가 SQL INSERT 작업 후에 데이터베이스에서 자동으로 생성된 기본 키 값을객체에 자동으로 매핑한다.
  • 즉, 데이터베이스의 기본 키가 자동 생성되는 경우(AUTO_INCREMENT) , MyBatis가 그 값을 가져와서 지정한 객체의 속성에 할당하는 기능을 의미이다.

 

keyProperty="id"

  • MyBatis가 SQL INSERT 작업 후에 데이터베이스에서 생성된 기본 키 값을 객체의 속성에 자동으로 매핑한다. 
  • 즉, keyProperty는 생성된 키 값을 저장할 객체의 속성 이름을 지정한다.
  • 여기서 "id"는 해당 객체에서 키 값을 저장할 필드를 나타낸다. 이후에 해당 객체를 사용하여 생성된 키 값을 확인할 수 있다.

궁금

데이터베이스 테이블에서 id를 auto_increment를 설정해놓았는데 굳이 MyBatis에서 useGeneratedKeys와 keyProperty를 사용하는 이유가 무엇일까? 사용해야하는 이유를 chat gpt를 통해 알아보았다.

 

chat gpt 대답

1. 자동 생성된 키 값을 객체에 매핑

  • 목적: 데이터베이스에서 자동으로 생성된 키 값을 MyBatis가 객체의 속성에 매핑하도록 하여, 이후에 이 값을 쉽게 사용할 수 있게 한다. 예를 들어, 새로운 User 객체에 대해 생성된 id 값을 user.getId()를 통해 쉽게 확인할 수 있다.

2. 개발 편의성

  • 명시적: 이 설정을 사용함으로써, 개발자는 어떤 속성에 생성된 키 값이 매핑되는지를 명확하게 알 수 있다. 이는 코드의 가독성을 높이고, 다른 개발자에게도 이해하기 쉽게 만든다.

3. 유연한 데이터 처리

  • 객체 상태 관리: 생성된 키 값을 객체에 할당하면, 이후에 해당 객체를 사용하여 추가적인 작업(예: 다른 테이블과의 관계 설정) 시에 필요할 수 있다. 이렇게 하면 객체의 상태를 쉽게 관리할 수 있다.

4. 향후 확장성

  • 추후 확장 가능성: 예를 들어, 나중에 추가적인 로직(예: 로그 기록, 이벤트 발생 등)을 추가할 경우, 키 값을 객체에 저장해 놓으면 더 유용하게 사용할 수 있다.

5. 명확한 의도

  • 의도적 설계: 데이터베이스와 애플리케이션 간의 의도를 명확히 하기 위해 이 설정을 사용한다. 이는 다른 팀원이 코드를 이해하는 데 도움이 된다.

 

'Java > SpringBoot' 카테고리의 다른 글

@RequestParm  (0) 2024.10.28
[MyBatis] <resultMap>, <id>, <result>, <collection>  (1) 2024.10.28
@Autowired  (0) 2024.10.23
Spring Bean (스프링 빈)  (0) 2024.10.23
@Controller, @RestController 차이  (0) 2024.10.23