Backend/Spring

INSERT / UPDATE 시 PK(auto_increment) 값 받아오기

seung_soos 2023. 4. 25. 22:40

getGeneratedKeys

프로젝트시 myBatis를 사용하여, API 요청시 2개의 테이블을 Insert 해야한다.

 

  • EX) Order라는 A 테이블과 OrderStatus라는 두개의 테이블이 존재한다.

A라는 테이블은 OrderID라는 PK값을 가지고, B라는 테이블은 OrderStatusID라는 PK를 가진다.

여기서 A테이블의 OrderID PK를 B테이블의 FK로 연결하지는 않았다.

※ OrderID의 PK이므로 중복이 존재하지않기에 JOIN 및 서브쿼리를 사용

이떄 하나의 API요청으로 두테이블은 모두 Insert하려한다.

 

API 요청시 Order 테이블의 Insert로 OrderID의 PK(auto_increment)가 생성이될때,

해당 PK값을 반환하여 OrderStatus 테이블을 Insert하려한다.

 

mapper.xml 설정

useGeneratedKeys="true" keyProperty="Entity의 PK 필드명"

 

myBatis 공식문서 의 내용으로 "생성키에 대한 JDBC 지원을 허용. 지원하는 드라이버가 필요하다. true 로 설정하면 생성키를 강제로 생성한다. 일부 드라이버(예를들면, Derby)에서는 이 설정을 무시한다." 라고 명시되어있다.

 

해당 내용을 해석해보면 Insert 후 PK값을 반환하는것이 아닌, PK값을 키를 먼저 반환한다고 생각이된다.(개인의 생각)

 

Insert 부분에는 당연히 PK는  자동생성이기에 입력되지않는다.

해당 설정을 사용하면 Entity에 PK값이 반환되어 .get시 PK값이 출력이된다.

 

참으로 신기하다.

 

참고 사이트 : myBatis 공식문서