SQL 수행작업 중 INSERT 이후에 새로운 쿼리 실행,
생성된 값을 바로 가져와서 쿼리를 보내야 하는 경우에 주로 생성하고 난 후의 인덱스(번호)를 가져와 작업해야 하는 상황에서 많이 사용
1. keyProperty : selectKey구문의 결과가 셋팅될 프로퍼티 설정
2. keyColumn : 리턴되는 결과셋의 칼럼명은 프로퍼티에 일치한다. 여러개의 칼럼을 사용한다면 칼럼명의 목록은 콤마를 사용해서 구분
3. resultType : 결과의 타입
4. order : BEFORE 또는 AFTER. BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty 에 셋팅한 뒤 INSERT 구문을 실행. AFTER로 설정하면 INSERT 구문을 실행한 뒤 selectKey 구문을 실행
5. statementType : STATEMENT, PREPARED 또는 CALLABLE중 하나를 선택
<insert id="insertTb" parameterType="TbDto">
/* order="BEFORE" 삽입 전에 조회 */
<selectKey keyProperty="tbId" resultType="int" order="BEFORE">
SELECT MAX(TB_ID) + 1 FROM TB
</selectKey>
/* #{tbId}에는 SelectKey 구문을 통해서 조회한 값을 저장 */
INSERT INTO TB(
TB_ID
, TB_NAME
, TB_USER)
VALUES(
#{tbId}
, #{tbName}
, #{tbUser})
</insert>
<insert id="insertTb" parameterType="TbDto">
/* order="AFTER" 삽입 후에 조회 */
INSERT INTO TB(
TB_ID
, TB_NAME
, TB_USER)
VALUES(
#{tbId}
, #{tbName}
, #{tbUser})
/*방금입력한 테이블의 auto_increment로 증가된 컬럼값을 가져오는 쿼리*/
<selectKey keyProperty="tbId" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
참고
➕https://kimsg.tistory.com/256
➕https://deeplify.dev/back-end/spring/select-key
➕https://yookeun.github.io/java/2014/07/11/mybatis-selectkey/