본문 바로가기
Mybatis

[Mybatis] insert 쿼리 실행 결과를 리턴받아 원하는 값 얻기 <selectKey>

by ungyuun 2023. 8. 24.

 

insert나 update를 한후, 결과값을 바로 리턴해야 하는 경우가 있는데,

 

기본 mybatis에서 제공하는 insert와 update는 업데이트 한 행의 개수를 리턴해준다

 

결과값을 받기위해 불필요한 쿼리를 또 진행해야 하는 문제가 생긴다.

 

이때 selectKey라는 엘리먼트를 사용하여 INSERT나 UPDATE에서 결과값을 리턴할수 있게 해준다.

 

 

 

사용법

<insert id="addProduct"	parameterType="product">
    INSERT 
    INTO product (prod_no,prod_name,prod_detail,manufacture_day,price,image_file,reg_date) 
    VALUES (seq.NEXTVAL,#{prodName},#{prodDetail},#{manuDate},#{price},#{fileName},SYSDATE)
    <selectKey keyProperty="prodNo" resultType="Integer" order="AFTER">
        SELECT seq.currval FROM dual
    </selectKey>
 </insert>

코드설명

 

<insert id="addProduct" parameterType="product"> : 컨트롤러에서 파라미터로 product 객체를 가져옴

 

<selectKey keyProperty="prodNo" resultType="Integer" order="AFTER"> :

INSERT문 실행후에, Integer타입인 조회결과product.setProdNo에 저장함

 

SELECT seq.currval FROM dual : seq.currval을 사용하여 현재 시퀀스를 가져옴. 가상의 테이블 dual

을 사용함

 

 

selectKey의 엘리먼트 속성 

keyProperty selectKey구문의 결과가 셋팅될 대상 프로퍼티.
keyColumn 리턴되는 결과셋의 컬럼명은 프로퍼티에 일치한다. 여러개의 컬럼을 사용하면 컬럼명의 목록은 콤마로 구분
여기서 본인은 도메인 객체의 OGNL 사용함
resultType 결과의 타입. 테이블 컬럼의 타입에 맞춰야함.
order BEFORE 또는 AFTER를 셋팅할 수 있다.
BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty 에 셋팅한 뒤 insert 구문을 실행한다.
AFTER로 설정하면 insert 구문을 실행한 뒤selectKey 구문을 실행한다

 

'Mybatis' 카테고리의 다른 글

[Mybatis] parameterType이 중요한 이유 (오류해결)  (0) 2023.09.14