반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[MyBatis] insert/update 쿼리 실행 후 결과값 가져오기 (useGeneratedKeys, keyProperty, selectKey) 본문

⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆/MyBatis

[MyBatis] insert/update 쿼리 실행 후 결과값 가져오기 (useGeneratedKeys, keyProperty, selectKey)

yeonee 여니 2023. 8. 15. 21:51
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

yeonee 블로그 : 네이버 블로그

예쁘고 맛있게 먹고 건강하게,강인하지만 온화하게 행하라. ※맛스타운스타일상 인스타 www.instagram.com/s2._.y25n ※맛집감성일상 유튜브https://youtube.com/channel/@S2_yeonee 티스토리https://yeoneeluv.tistory.co

blog.naver.com

 

 

insert/update 등을 실행하고서 결과를 확인해야 하는 상황이 생깁니다.

다음은 insert 되는 Auto Increment 값(mysql 등)이나 sequence 값(oracle 등)을 조회하는 방법입니다.

 

 

* useGeneratedKeys, keyProperty 옵션

사용하는 데이터베이스가 Mysql과 같이 자동생성 키를 지원한다면 useGeneratedKeys, keyProperty 옵션을 통해 insert 된 데이터의 key 값을 리턴 받을 수 있습니다.

  • useGeneratedKeys : (insert, update에만 적용) 자동생성 키를 받을때 true로 설정한다. (default: false)
  • keyProperty : 리턴 될 key property 설정. 여러개를 사용한다면 ,(콤마)를 구분자로 나열한다.

만약 ON DUPLICATE KEY UPDATE를 사용한다면 update된 데이터의 key 값을 조회할 수 있습니다.

 

<insert id="openChatRoom" parameterType="chatRoom" useGeneratedKeys="true">
    <!--; order="AFTER"로 설정했기때문에, INSERT 구문이 먼저 실행된 후 아래의 SELET 구문을 통해 chatRoomNo를 가져옴 -->
    INSERT INTO CHAT_ROOM VALUES
    (SEQ_CR_NO.NEXTVAL , #{title} , DEFAULT , #{userNo} )

    <selectKey keyProperty="chatRoomNo" resultType="int" order="AFTER">
        SELECT SEQ_CR_NO.CURRVAL FROM DUAL
    </selectKey>
</insert>
package com.kh.spring.chat.model.vo;

import lombok.Data;

@Data
public class ChatRoom {

	private int chatRoomNo;
	private String title;
	private String status;
	private int userNo;
	
	private String userName; //;db상없는 데이터
	private int cnt; //;db상없는 데이터 (chatroomjoin과 join 해서 총 사용자 수 알아낼것임)
}

 

 

* SelectKey 옵션

Oracle과 같이 Sequence를 사용하는 경우는 selectKey 옵션을 사용하면됩니다.

  • selectKey
    • keyProperty : 리턴 받을 변수명
    • resultType : 러턴 값의 자료형
    • order : 순서 [AFTER|BEFORE]
      • AFTER : insert 구문 실행 후 selectKey 구문 실행
      • BEFORE : selectKey 구문 실행 후 리턴 값을 keyProperty에 셋팅한 뒤 insert 구문 실행

 

 

728x90
반응형
LIST