SPRING

SPRING mybatis <selectKey>

Adev 2023. 2. 13. 00:05

: 자동 증가를 설정한 PK값을 <selectKey>태그를 통해 수동으로 얻어와 그 결과를 이용할 수 있도록 한다.

 


예를 들어, 게시판에 게시글 등록 후 "00번 게시글이 등록되었습니다"라는 모달창을 띄울 때 사용할 수 있다.

게시글 번호를 자동 증가하도록 설정한 후 단순 <insert> 태그를 사용해서 글을 등록하고 해당 객체에서 게시글 번호를 얻어오면 모두 '0'으로 출력된다. (MySQL)
<selectKey>태그로 새 글 등록 전 글번호에서 1을 더한 값를 얻어온 후 그 결과를 방금 등록한 게시글 번호로 사용하면 된다.

 

※ <selectkey> order속성 BEFORE를 사용할 경우 첫 글을 게시할 시 이전글 번호(boardno)가 없어서 sql문에서 에러가 방생한다.

<selectkey> order속성 AFTER를 사용하니 해결됐다.

 

 

ex)


mapper Interface

public void insertSelectKey(BoardVO board);

 

mapper XML

<!-- 첫 글 게시 시 오류-->

<insert id="insertSelectKey">

<selectKey keyProperty="boardno" order="BEFORE"
resultType="int">
select MAX(boardno)+1 from boards
</selectKey>

insert into boards
(boardno, title, content, writer, deletestate,
boardtype, registerdate, updatedate) 
values 
(#{boardno}, #{title},
#{content}, #{writer}, default, default, default, default)

</insert>

 

<!-- 정상 작동-->

<insert id = "insertSelectKey">

insert into boards
(boardno, title, content, id, state,
boardtype, registerdate, updatedate) 
values 
(#{boardno}, #{title},
#{content}, #{id}, default, default, default, default)

<selectKey keyProperty="boardno" order="AFTER" resultType="int">
select MAX(boardno) from boards
</selectKey>

</insert>