[MyBatis] Selectkey

LeHoODU·2023년 12월 18일
0
post-thumbnail

1.Selectkey?

SQL 수행작업 중 INSERT 이후에 새로운 쿼리 실행,
생성된 값을 바로 가져와서 쿼리를 보내야 하는 경우에 주로 생성하고 난 후의 인덱스(번호)를 가져와 작업해야 하는 상황에서 많이 사용



2.Selectkey 속성

1. keyProperty : selectKey구문의 결과가 셋팅될 프로퍼티 설정

2. keyColumn : 리턴되는 결과셋의 칼럼명은 프로퍼티에 일치한다. 여러개의 칼럼을 사용한다면 칼럼명의 목록은 콤마를 사용해서 구분

3. resultType : 결과의 타입

4. order : BEFORE 또는 AFTER. BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty 에 셋팅한 뒤 INSERT 구문을 실행. AFTER로 설정하면 INSERT 구문을 실행한 뒤 selectKey 구문을 실행
5. statementType : STATEMENT, PREPARED 또는 CALLABLE중 하나를 선택



3.예시

<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/

profile
Back-End Developer

0개의 댓글