SQL 수행작업 중 insert된 이후에 알 수 있는 값 또는,
생성된 값을 바로 가져와서 select 쿼리를 보내야 하는 경우가 있다.
주로 생성하고 난 후의 인덱스(번호)를 가져와 작업해야 하는 상황에서 많이 사용한다.
이런경우 java에서 insert 쿼리를 실행하고 값을 받은 후
값을 가지고 다시 쿼리를 DB에 전송하는 방법이 있다.
하지만, 불필요한 여러번의 DB 입출력은 시간이 느려진다는 단점이 있다.
그때, selectKey를 사용하여 바로 적용할 수 있다.
마이바티스, 아이바티스 두개 다 적용이 가능하다.
selectKey는 DB에 명령을 한번만 보내며, 우선 입력한 값의 결과값을 다음 쿼리로 바로 return 시켜주는 것이다.
아래 예제는 selectKey의 기본 사용법이다.
<selectKey resultType="integer" keyProperty="rsrvIdx" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
속성설명
keyProperty | selectKey구문의 결과가 셋팅될 대상 프로퍼티. |
keyColumn | 리턴되는 결과셋의 칼럼명은 프로퍼티에 일치한다. 여러개의 칼럼을 사용한다면 칼럼명의 목록은 콤마를 사용해서 구분한다. |
resultType | 결과의 타입. 마이바티스는 이 기능을 제거할 수 있지만 추가하는게 문제가 되지는 않을것이다. 마이바티스는 String을 포함하여 키로 사용될 수 있는 간단한 타입을 허용한다. |
order | BEFORE 또는 AFTER를 셋팅할 수 있다. BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty 에 셋팅한 뒤 insert 구문을 실행한다. AFTER로 설정하면 insert 구문을 실행한 뒤 selectKey 구문을 실행한다. 오라클과 같은 데이터베이스에서는 insert구문 내부에서 일관된 호출형태로 처리한다. |
statementType | 위 내용과 같다. 마이바티스는 Statement, PreparedStatement 그리고 CallableStatement을 매핑하기 위해 STATEMENT, PREPARED 그리고 CALLABLE 구문타입을 지원한다. |
MyBatis 3.2.6 버전부터는 multiple select key 가 지원이 된다.
1 2 3 |
<selectKey keyProperty="userId,userName" resultType="hashmap" order="BEFORE"> SELECT 'key1' as userId, 'key2' as userName FROM DUAL </selectKey> Colored by Color Scripter |
multiple select key 를 사용하면 이제 2개의 값을 받아올 수 있게 된다.
'데이터베이스 > MyBatis' 카테고리의 다른 글
[Mybatis] <resultMap> 사용 (0) | 2021.05.30 |
---|---|
[Mybaits] 마이바티스 #{}과 ${}의 차이 (0) | 2021.05.25 |
[Mybatis] 마이바티스 insert 후 결과값 반환 <SelectKey> 태그 (1) | 2021.05.17 |
[Mybatis] 마이바티스 CDATA 사용하기 (0) | 2021.03.09 |
[Mybatis] 마이바티스 parameterType와 resultType차이 (0) | 2021.03.09 |