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 공식문서