데이터베이스 insert 후 PK를 바로 얻어오기 위해서 다음과같이
insert 뒤에 select 를 실행 합니다. ORM 프레임워크는 Mybatis를 이용했습니다.
DBMS 별로 약간씩 다르니, 잊지 말고 참고 해야겠네요.
return 값은 <insert>에 설정된 dto에 따라 return 됩니다.
MySql
<insert id=”insertContent” parameterType=”content” resultType=”dto”>
<![CDATA[
INSERT INTO CONTENT (
CREATED_DATE, TITLE, CONTENT, CONTENT_TYPE
) VALUES (
now(), #title#, #content#, #contentType#
)
]]>
<selectKey keyProperty=”seqId” resultType=”int”>
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
MSSQL
<insert id=”createProjectBasicInfo” parameterType=”prjIdx” resultType=”dto”>
<selectKey keyProperty=”prj_info_seq” resultType=”int”>INSERT INTO PRJ_INFO (
…
) VALUES (
…
)
SELECT SCOPE_IDENTITY()</selectKey>
</insert>
Oracle
<insert id=”insert_message” parameterType=”java.util.HashMap” resultType=”dto”>
<selectKey keyProperty=”message_id” resultType=”Integer”>
SELECT message_id_seq.nextval FROM DUAL
</selectKey>
INSERT INTO guestbook_message (message_id, guest_name, password, message)
VALUES(#message_id#, #gName#, #pw#, #ms#)
</insert>