본문 바로가기

SPRING

[MYBATIS] KEY값을 생성하고 생성된 KEY 되돌려 받기

이번엔 Spring이랑 Mybatis를 연계해서 쓰다보니 이런 문제가 발생했다.

로그를 입력하는데 id가 필요한데 등록된 아이디를 어떻게 가져오지 ?

데이터베이스에 등록된 ID가 뭔줄 알고 가져오지 ? 라는 궁금증이 생겼다.

왜냐면 기존에 처리가 아래처럼 되어있다보니 그런 고민을 하게됐다.

java단에서 max ID를 가져오는 거였다면 고민할 필요 없었을텐데 말이다.

 

selectKey를 통해서 vo의 id란 property를 활용해서 #{fileId}를 셋팅한다.

그리고 거기서 나온 결과값을 long type으로 vo에 반환하게 되며

order는 실행순서로 아래의 insert가 수행되기 전에 실행된다.

<insert id="insert" parameterType="vo" keyProperty="id"  keyColumn="id">
<selectKey keyProperty="id" resultType="long" order="BEFORE">
   select DECODE(cnt, 0, SGDS_DSGN_DOC_FILE_ID.nextval, #{fileId})
       from (
           select count(*) cnt
               from SGDS_DSGN_DOC_FILE_VER
                   where file_id = #{fileId}
       )
  </selectKey>
  insert into SGDS_DSGN_DOC_FILE_VER  (id)
  values  (id)
 </insert>

이렇게 사용하게 되면 이 쿼리가 사용된 이후에 vo를 통해서 받을 수 있다.

dsgnDocMapper.insertYujiDocVer(dsgnDocFileVO);

신기한 것은 return받는 부분이 없는데도 말이다.