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 |
---|