본문 바로가기
웹프로그래밍/Oracle or Sql

SELECT KEY 셀렉트키 MYBATIS MAX+1

by Seras 2020. 10. 28.
반응형

<< SELECT KEY 셀렉트키 MYBATIS MAX+1 >>

 

JAVA, SPRING 기반의 MYBATIS 에 흔히 사용되는 SELECT KEY 구문이다.

아래를 참고하여 사용 할 수 있다.

 

1. SQL

<insert id="insertBoard" useGeneratedKeys="true">
<selectKey keyProperty="no" resultType="String" order="BEFORE">
SELECT NVL( MAX( TO_NUMBER( TRIM(NO) ) ), 0 ) + 1 FROM   /*테이블명 A*/
</selectKey>
INSERT
INTO  /*테이블명 A*/
       (
             NO,
             NAME,
       )
       VALUES
       (
              #{no},      /* 해당 필드는 위에서 셀렉트 해온 no가 들어감. */
              #{name}
       )
</insert>
 

 

2. Insert, Update 와 Delete 엘리먼트 속성

useGeneratedKeys (입력(insert, update)에만 적용) 데이터베이스에서 내부적으로 생성한 키 (예를들어 MySQL또는 SQL Server와 같은 RDBMS의 자동 증가 필드)를 받는 JDBC getGeneratedKeys메소드를 사용하도록 설정하다. 디폴트는 false 이다.
keyProperty (입력(insert, update)에만 적용) getGeneratedKeys 메소드나 insert 구문의 selectKey 하위 엘리먼트에 의해 리턴된 키를 셋팅할 프로퍼티를 지정. 디폴트는 셋팅하지 않는 것이다. 여러개의 칼럼을 사용한다면 프로퍼티명에 콤마를 구분자로 나열할수 있다.

 

3. selectKey 엘리먼트 속성

keyProperty selectKey구문의 결과가 셋팅될 대상 프로퍼티.
keyColumn 리턴되는 결과셋의 칼럼명은 프로퍼티에 일치한다. 여러개의 칼럼을 사용한다면 칼럼명의 목록은 콤마를 사용해서 구분한다.
resultType 결과의 타입. 마이바티스는 이 기능을 제거할 수 있지만 추가하는게 문제가 되지는 않을것이다. 마이바티스는 String을 포함하여 키로 사용될 수 있는 간단한 타입을 허용한다.
order BEFORE 또는 AFTER를 셋팅할 수 있다. BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty 에 셋팅한 뒤 insert 구문을 실행한다. AFTER로 설정하면 insert 구문을 실행한 뒤 selectKey 구문을 실행한다. 오라클과 같은 데이터베이스에서는 insert구문 내부에서 일관된 호출형태로 처리한다.
statementType 위 내용과 같다. 마이바티스는 Statement, PreparedStatement 그리고 CallableStatement을 매핑하기 위해 STATEMENT, PREPARED 그리고 CALLABLE 구문타입을 지원한다.

 

 

 

 

 

반응형