생각
관리자 페이지 구현을 하는 수업을 듣는 도중에 <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 |