데이터베이스/MyBatis

[Mybaits] <selectKey> 속성

포포015 2021. 5. 30. 23:03

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개의 값을 받아올 수 있게 된다.