Programing/Spring

mybatis selectkey 사용법 생성한 키값 리턴받기.

리커니 2018. 1. 22.
반응형

mybatis selectkey 사용법 생성한 키값 리턴받기.

 

update나 insert 시 키값을 리턴 받는 방법을 알아보도록 하겠습니다.

 

예제를 보도록 하죠.

<update id="udtBitMsgVersion" parameterType="inciMsgVO">
    <selectKey keyProperty="msgVersion" resultType="java.lang.Integer" order="AFTER">
        SELECT SID_INCIDENT_REV AS msgVersion 
          FROM BITBUSSTOPINFODEVICE 
         WHERE SID_NO = #{inciMsgLocation}
      </selectKey>
  UPDATE BITBUSSTOPINFODEVICE
     SET SID_INCIDENT_REV = SID_INCIDENT_REV+1
    WHERE SID_NO = #{inciMsgLocation}
</update>

 

위의 예제를 보시면 update 태그 내에 selectKey 태그가 들어간 것을 보실 수 있습니다.

결론부터 말씀드리면 업데이트를 한 후 업데이트 된 값을 리턴받는 것인데요,

 

첫번째 라인부터 설명드리겠습니다.

<update> 태그의 id 는 DAO에서 호출할 id, parameterType은 쿼리내에서 사용될 파라메터의 타입 입니다.

여기서 주의하셔야 할 점은 resultType을 설정 안해주셔도 리턴이 된다는 것입니다.

 

어떻게 가능한지 보도록 하죠.

우선 업데이트문은 단순히 SID_INCIDENT_REV 값을 +1 하는 것입니다.

 

selectKey 태그를 보도록 하죠.

keyProperty 와 resultType, order 요소가 있습니다.

keyProperty는 리턴받을 변수명 resultType은 리턴될 값의 형, order는 순서 입니다.

update문을 실행후 selectKey태그를 실행할 것이냐, 실행 전에 실행 할 것이냐 인데요,

말그대로, AFTER와 BEFORE 옵션이 있습니다.

 

위에 예제에서 order 요소는 AFTER 옵션을 주었습니다. UPDATE 문이 실행된 후에 실행 해야되기 때문이죠.

UPDATE 문을 통해 SID_INCIDENT_REV 값이 +1 되었습니다.

그 후에 1이 증가된 SID_INCIDENT_REV 값을 update태그의 parameterType인 inciMsgVO 의 msgVersion 으로 set 하는 것 입니다. (inciMsgVO.setMsgVersion(리턴된 값);)

 

그러므로 inciMsgVO 안에는 msgVersion 이 있어야 겠죠.

없다면 1값만 계속 리턴 되니 주의하세요!

 

반응형

댓글

💲 추천 글