[mybatis] selectKey return값이 1이 계속 나오는 이유와 해결방법

huihui·2021년 3월 2일
0
post-custom-banner

맞닥뜨린 상황은 이러하다.

insert를 하면서 pk 컬럼(push_send_seq)이 auto_increment로 증가하고 이 값을 즉시 사용해야만 했다.

<insert id="insertPushSend">
    INSERT INTO push_send(...) VALUES(...)
    
    <selectKey keyProperty="push_send_seq" resultType="long" order="AFTER">
        SELECT LAST_INSERT_ID() AS push_send_seq
    </selectKey>
</insert>

위와 같이 마이바티스 코드를 짰더니 LAST_INSERT_ID 함수에 의해 출력되는 값이 1로 고정되었다.

구글링을 해보니 마지막에 +1이 된 push_send_seq를 가져오는 것이 아닌 row count를 갖고 온 것이다.

그렇다면 어떻게 해야 할까?
위의 방법을 인지하기 전에 코드는 아래와 같았다.

long push_send_seq = pushService.insertPushSend(pushSendDomain);

그러면 push_send_seq는 계속 1만 갖게 되므로 코드를 아래와 같이 바꿔야 한다.

long rowCount = pushService.insertPushSend(pushSendDomain);
long push_send_seq = pushSendDomain.getPush_send_seq();

이로써 push_send_seq에는 pk의 +1이 증가된 값이 들어있는 것을 확인할 수 있다.

참고로 위의 마이바티스 코드를 아래와 같이 작성해도 된다.

<insert id="insertPushSend" useGeneratedKeys="true" keyProperty="push_send_seq">
    INSERT INTO push_send(...) VALUES(...)
</insert>

이게 더 깔끔한 것 같다.

post-custom-banner

0개의 댓글