<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값이 우선되는것 같습니다.
'SQL(MySQL, ORACLE)' 카테고리의 다른 글
[MySQL][Mybatis]LIKE검색할 때 충분히 할 수 있는(?) 실수 (0) | 2022.05.11 |
---|---|
[MySql]MySql에서 삼항연산하기 (0) | 2022.04.08 |
[MySQL][mybatis]쿼리 두 개 실행 시키기 (0) | 2022.03.31 |