MyBatis INSERT 시 Auto Increment 값 리턴 받기

문제 상황

MySQL Auto Increment를 적용한 게시글 엔티티를 추가하고, 해당 게시글의 아이디를 FK로 파일 업로드를 구현할 생각이었다.

현재 환경은 MyBatis를 사용하고 있었고, 기본적으로 Mybatis는 DML 쿼리에 대해 return 값이 없었기 때문에 A.I로 생성한 PK 값을 가져오는 방법을 찾아보았다.

 

 

해결 방법

Mapper.xml에서 useGeneratedKeys 속성을 사용하여 생성된 키 값을 받아올 수 있다.

아래와 같이 useGeneratedKeys를 true로 주고, 값을 받아올 필드를 keyProperty 속성으로 지정해 줄 수 있다.

<insert id="insertBoard" parameterType="boardVO" 
		useGeneratedKeys="true" keyProperty="id" keyColumn="id">
		//INSERT Query	
	</insert>

  

 

주의 사항

단, 이때 아래와 같이 리턴을 받으면 안된다.

MyBatis의 INSERT 쿼리의 리턴 값은 INSERT 된 값의 개수를 리턴한다. 즉, 1이라는 값을 반환하게 된다.

long id = boardService.insertBoard(boardVO);

 

 

위 예시의 keyProperty에 대해 설명할 때 값을 받아올 필드라고 했다.

그 말은 INSERT한 VO 객체의 해당 필드에 값이 주입된다는 뜻이다.

따라서 아래와 같이 ID 값을 받아올 수 있다.

boardService.insertBoard(boardVO);

Long id = boardVO.getId();