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 속성과 일치하는 컬럼의 값을 받아와 매퍼 인터페이스에서 호출한 메서드의 파라미터에 반환합니다.
'DataBase > My SQL' 카테고리의 다른 글
SQL 복수개의 테이블로부터 count한 값들을 더하는 쿼리문 (UNIONALL / sum() ) (0) | 2022.03.25 |
---|---|
[MySql]DB 데이터 공백존재 컬럼 공백제거 REPACE() (0) | 2021.12.30 |
[MyBatis] 동적쿼리문 <if, choose, when, otherwise, sql, include> (if~then/elseif~then 사용불가) (0) | 2020.09.07 |
My SQL 설치 및 환경설정 - (정리예정) (0) | 2020.09.01 |