728x90

<내가 사용한 방법>

- 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

https://blog.naver.com/moonv11/60181183377

728x90

+ Recent posts