본문 바로가기
Dev/Devlog

[Mybatis] selectKey - INSERT 후 key 값 가져오기

by 석맨.class 2025. 2. 12.
반응형

Spring Boot MyBatis에서 selectKey 사용 방법

MyBatis를 이용해 데이터를 삽입할 때, 데이터베이스가 자동 생성한 기본 키(primary key) 값이 바로 필요한 경우가 있습니다.

이때 유용하게 사용할 수 있는 기능이 바로 selectKey 입니다.

 

속성

  • keyProperty : 가져올 키값을 parameterType 객체의 어떤 필드에 할당할지 지정.
  • resultType : 키값의 타입 keyProperty 에서 지정한 필드의 속성과 같아야 한다.
  • order : INSERT 문 기준 키값을 조회하는 순서를 지정한다. AFTER 는 INSERT 문 실행 후 selectKey 가 실행되어 키값을 조회하며 키값이 시퀀스를 사용한 값이라면 BEFORE 속성값을 주어 INSERT 문 실행전에 미리 시퀀스 값을 가져올 수 있다.

 

사용방법

<insert id="insertUser" parameterType="com.example.User"> 
	<!-- 필요한 키값(id)이 auto_increment 인 경우 (MySQL) -->
    INSERT INTO user (
        id
        , name
        , email
    ) VALUES (
        #{id}
        , #{name}
        , #{email}
    )
    <selectKey keyProperty="id" resultType="int" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey> 
</insert>

 

시퀀스 가져오기

<insert id="insertUser" parameterType="com.example.User">
  <!-- insert 전에 시퀀스 값을 조회하여 User 객체의 id 필드에 할당 -->
  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    SELECT user_seq.nextval FROM dual
  </selectKey>
  
  INSERT INTO user (id, name, email)
  VALUES (#{id}, #{name}, #{email})
</insert>