DataBase/My SQL

selectKey 짧은 설명과 사용 예시

유혁스쿨 2022. 4. 14. 10:09
728x90
반응형

 

exMapper.insert(addParam);
public <T> Integer insert(final T param) throws Exception;
<insert id="insert">
    <selectKey keyProperty="ex_dtkey" order="BEFORE" resultType="String">
        SELECT NOW(6) AS 
    </selectKey>
    INSERT INTO ex_table
    (ex_dtkey)
    values(#{ex_dtkey})
</insert>

selectKey의 keyProperty값에 해당하는 데이터를 받아옴과 동시에 Service단 메서드 호출부에 값을 반환한다


사용 예 : 자동증가값

 

java단에서 값을 처리(생성)하여 받아오는게 아니라 위 코드처럼 쿼리로부터 현재 시간을 기준으로 값을 "생성" 해 내어 그 값을 테이블의 컬럼에 저장함과 동시에 해당 쿼리를 호출한 자바의 메서드의 매개변수에 반환할때 사용.

1. 쿼리를 통해 생성과 동시에 insert한 값을 기준 ->

: 자바단에서 유효성 검증을 할때 기준값으로 사용

 

2. 쿼리를 통해 생성과 동시에 insert한 값을 기준 -> 자바 반환 -> 화면 반환
: 데이터 핸들링을 통해 화면에서 특정 이벤트 처리를 할 때 기준값으로 사용


결과적으로 쿼리로 생성된 값은 ex_dtkey의 키 값 쌍으로 마이바티스를 호출한 메서드의 매개변수인 inesrt(addParam)의 addParam에 반환한다.

exMapper.insert(addParam);
String chkStr = MapUtils.getString(addParam, "exDtkey");

문자열 변수 chkStr에는 SQL 쿼리의 Now(6) 함수를 통해 생성된 값이 저장된다.

 

1. AUTO_INCREMENT가 적용되지 않은 테이블에 값을 계산한 후 계산된 값을 추출하는 방법

위와 같이 selectkey의 order값을 BEFORE로 세팅하면 값을 삽입하기 전 특정 계산식에 의해 값을 계산한 후 계산된 값을 삽입하면서 파라미터를 넘긴 함수의 매개변수에 다시 담아 함수로 반환합니다.

 

2. AUTO_INCREMENT가 적용된 테이블에 삽입하는 순간 데이터의 값을 조회하여 값을 추출하는 방법

selectkey의 order값을 AFTER로 세팅하면 테이블을 생성하거나 속성에 특정 함수를 사용하여 자동증가값이 설정되어있다면 INSERT구문에서 값을 삽입한 후 삽입된 값을 다시 추출해 내어 매개변수에 담아 함수에 반환받을수 있습니다.

<insert id="insert">
    <selectKey keyProperty="ex_dtkey" order="AFTER" resultType="String">
        select LAST_INSERT_ID()
    </selectKey>
    INSERT INTO ex_table
    (ex_dtkey)
    values(#{ex_dtkey})
</insert>

이때 사용되는 함수는 LAST_INSERT_ID()라는 함수이며 해당 함수를 통해 마지막으로 insert된 값 중 선언한 keyProperty 속성과 일치하는 컬럼의 값을 받아와 매퍼 인터페이스에서 호출한 메서드의 파라미터에 반환합니다.

 

728x90
반응형