본문 바로가기

개발/DB

[MyBatis] Insert 후 Key 값 받아오기 (selectKey)

반응형

- 나의 상황

: 마스터 테이블이 있고, 히스토리 테이블이 있다.

등록요청이 오면, 마스터 테이블에 insert 하고 그 키 값을 받아다가 히스토리 테이블에도 insert 를 시켜주어야한다. (마스터 테이블의 키 컬럼은 auto_increment 로 자동으로 넣어주고 있다.) 

처음엔 마스터 테이블 등록 -> 마스터 테이블에서 등록된 키 값 조회 -> 히스토리 테이블 등록 이렇게 생각했는데.. 뭔가 계속 마음에 안들고.. 다른 방법이 있을 거 같고.. 해서 찾다가 알게 된 방법 selectKey!

selectKey 를 사용하면 insert 요청 시 보낸 객체에 insert 후 생성된 키 값이 셋팅되어진다!

- 사용법

1. MyBatis 쿼리에 useGeneratedKeys, keyProperty 작성! keyProperty 에 키 컬럼명을 넣어주면 된다.

<insert id="insertMaster" parameterType="mstRequest" useGeneratedKeys="true" keyProperty="keyColumn">
	INSERT INTO MASTER_TABLE
    ... 생략...
</insert>

 

2. Java 에서 사용.

public int create(MasterRequest mstRequest){
	//1. 마스터테이블에 insert
    mapper.insertMaster(mstRequest); //selectKey를 사용했으므로 여기 mstRequest에 key 값이 셋팅되어있다!
    
    //2. 히스토리테이블에 insert
    HistoryRequest hstReq = new HistoryRequest();
    hstReq.setKeyColumn(mstRequest.getKeyColumn()); 
    
    ..생략..
    
}

 

* 더 좋은 방법이 있다면 댓글로 알려주세요..!

반응형