mybatis selectkey 사용법 생성한 키값 리턴받기.
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값만 계속 리턴 되니 주의하세요!