본문 바로가기

dev/java(egov)

[mybatis] insert 후 key값 반환 selectKey

반응형
oracle insert 후 key값 반환
  • mabatis에 selectKey라고 하는 db insert 후 리턴 받는 기능입니다.
구글에 검색 키워드

 

아래처럼 엄청나게 많이 나오네요

  • mybatis 키 값 리턴
  • Mybatis insert 후 값 가져오기
  • MyBatis insert 후 PK 값 가져오기
  • oracle insert 후 key값 반환
  • Mybatis insert 리턴 값
  • mybatis insert return pk
  • mybatis insert return key
selectKey 요소의 주요 속성
  • keyProperty: 생성된 키 값을 설정할 객체의 속성을 지정합니다. 여러 개의 속성을 지정할 수 있습니다.
  • keyColumn: 데이터베이스의 column 이름을 지정합니다.
  • resultType: 생성된 키 값의 데이터 타입을 지정합니다. 예를 들어, int, long, String 등.
  • order: 키 값을 생성하는 시점을 지정합니다. BEFORE는 삽입 전에, AFTER는 삽입 후에 키 값을 생성합니다.

 

문자열 키 리턴
BEFORE
--테이블
CREATE TABLE "SAMPLE" (
    "ID" VARCHAR2(16 BYTE) NOT NULL ENABLE, 
    "NAME" VARCHAR2(50 BYTE), 
    "DESCRIPTION" VARCHAR2(100 BYTE), 
    "USE_YN" CHAR(1 BYTE), 
    "REG_USER" VARCHAR2(10 BYTE), 
    PRIMARY KEY ("ID")
)

<insert id="insertSample" parameterType="SampleVO">

    <selectKey keyProperty="id" resultType="string" order="BEFORE">
        <![CDATA[
        SELECT 'SAMPLE-' || LPAD(NVL(MAX(TO_NUMBER(SUBSTR(id, 8))), 0) + 1, 5, '0') AS id
        FROM SAMPLE
        ]]>
    </selectKey>

        INSERT INTO SAMPLE
            ( ID
              , NAME
              , DESCRIPTION
              , USE_YN
              , REG_USER )
        VALUES ( #{id}
              , #{name}
              , #{description}
              , #{useYn}
              , #{regUser} )

</insert>

 

 

 

int 형 키 리턴
BEFORE
--테이블
CREATE TABLE "SAMPLE2" (
    "ID2" NUMBER NOT NULL ENABLE, 
    "NAME" VARCHAR2(50 BYTE), 
    "DESCRIPTION" VARCHAR2(100 BYTE), 
    "USE_YN" CHAR(1 BYTE), 
    "REG_USER" VARCHAR2(10 BYTE), 
    PRIMARY KEY ("ID2")
)

<insert id="insertSample2" parameterType="SampleVO">

    <selectKey keyProperty="id2" resultType="int" order="BEFORE">
        select nvl(max(id2),0)+1 as id from SAMPLE2
    </selectKey>
    insert into SAMPLE2 (id2, NAME
              , DESCRIPTION
              , USE_YN
              , REG_USER )
    values (#{id2}
              , #{name}
              , #{description}
              , #{useYn}
              , #{regUser} )

</insert>

 

 

 

int 형 키 리턴
AFTER ORACLE
-- sample_seq 시퀀스

<insert id="insertSample" parameterType="map" useGeneratedKeys="true" keyProperty="id2">
    INSERT INTO SAMPLE2 (id2, name, value)
    VALUES (sample_seq.NEXTVAL, #{name}, #{value})

    <selectKey keyProperty="id2" resultType="int" order="AFTER">
        SELECT sample_seq.CURRVAL FROM dual
    </selectKey>
</insert>

 

 

 

AFTER 문자열 리턴 및 다른 DB들은 다음에 하겠습니다.

반응형