<내가 사용한 방법>
- Oracle DB 기준, Sequnce 사용 방법
+ insert문에 sysdate 추가
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.dao.PersonInterface">
<insert id="insertUserInfo" parameterType="HashMap">
<selectKey keyProperty="user_no_seq" resultType="integer" order="BEFORE">
select USER_NO_SEQ.nextval FROM DUAL
</selectKey>
INSERT INTO PERSON
(USER_NO, C_EMAIL, C_NAME, JOIN_DATE, OS_TYPE)
VALUES(
#{user_no_seq},
#{C_EMAIL},
#{C_NAME},
sysdate,
#{OS_TYPE}
)
</insert>
</mapper>
+ 참고
출처: https://taetaetae.github.io/2017/04/04/mybatis-useGeneratedKeys/
# selectKey 옵션
Oracle 같은 경우는 Auto Increment 가 없고 Sequence를 사용해야만 하기 때문에 위 옵션을 사용할수가 없다. 하지만 다른 우회적인(?) 방법으로 위와같은 효과를 볼수가 있다.
파라미터의 모델이나 java구문은 위와 동일하고 xml 쿼리 부분만 아래와 같이 설정해주면 된다.
<insert id="insertStudents" parameterType="Student">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select SEQ_ID.nexyval FROM DUAL
</selectKey>
insert into Students
(id, name , email)
values
(#{id}, #{name}, #{email})
</insert>
위와같은 코드에서 쿼리가 실행되기 전에 id값에 Sequence에 의해 값을 셋팅하게 되고, 자동적으로 해당 값을 Student의 id에 set하게 되서 동일한 결과를 볼수가 있다.
---------------------------------------------------------------------------------------------------
하단은 추가 참고 사항
DBMS 별 selectKey 방법
출처 : http://kamsi76.egloos.com/377946
MySql
<insert id="insertContent" parameterClass="content">
<![CDATA[
INSERT INTO CONTENT (
CREATED_DATE, TITLE, CONTENT, CONTENT_TYPE
) VALUES (
now(), #{title}, #{content}, #{contentType}
)
]]>
<selectKey keyProperty="seqId" resultClass="int">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
MSSQL
<insert id="createProjectBasicInfo" parameterClass="prjIdx">
<selectKey keyProperty="prj_info_seq" resultClass="int">INSERT INTO PRJ_INFO (
...
) VALUES (
...
)
SELECT SCOPE_IDENTITY()</selectKey>
</insert>
Oracle
<insert id="insert_message" parameterClass="java.util.HashMap">
<selectKey keyProperty="message_id" resultClass="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>[출처] MyBatis 에서 selectkey 사용 방법|작성자 moonv11
Reference