본문 바로가기

SQL(MySQL, ORACLE)

[Mybatis][MySql] insert, update, delete에 selectKey 넣기

<update id="updateReportCnt" parameterType="BoardVO">
    <selectKey resultType="Integer" keyProperty="boardNo" order="BEFORE">
        select board_no from com_post where post_no = #{postNo}
    </selectKey>
    /* post.updateReportCnt */
    update
        com_board
    set
        report_cnt = (select sum(post_report_cnt) from com_post where board_no = #{boardNo})
    where
        board_no = #{boardNo}
</update>

<insert id="insertReply" parameterType="ReplyVO">
    <selectKey resultType="Integer" keyProperty="rpNo" order="BEFORE">
        select ifnull(max(rp_no),0)+1 from com_reply
    </selectKey>
    /* post.insertReply */
    insert into com_reply (
        post_no,
        post_title,
        rp_no,
        rp_contents,
        rp_writer,
        rp_date
    )values(
        #{postNo},
        #{postTitle},
        #{rpNo},
        #{rpCon},
        #{rpWriter},
        NOW()
    )
</insert>

제가 제작하고있는 cms 게시판 일부 db로직인데요

컨트롤러로 받아올 수 있는 값이 key값이기는 하나

조회 하고자 할때 필요한 조건값과 다를 때,

또는 insert할때 db에 저장된 마지막 row의 index(seq 등)을 가져와서

+1 해서 저장 하고 싶을때

 

selectKey를 사용하여 keyProperty에 값을 저장하여 사용할 수 있습니다.

※ 주의사항

- keyProperty에 사용될 변수 명은 parameterType에 지정될 vo에 getter와 setter가 있어야 합니다.

없으면 'vo에서 boardNo를 찾을 수 없습니다' 라는 오류가 떠요

- 매핑은 알아서 잘 되더라구요?

- keyproperty에 값과 동일한 이름의vo를 가져오면 keyproperty값이 우선되는것 같습니다.