동적 SQL(selectKey, foreach)

김덕근·2023년 5월 9일
0

Spring

목록 보기
17/19

동적 SQL중 <selectKey>

useGeneratedKeys

DB 내부적으로 생성한 키(ex.시퀀스) 를 받는
JDBC useGeneratedKeys() 메서드를 사용하도록 설정한다. (기본값 false)

<selectKey>

INSERT/UPDATE에 사용된 키를 원하는 변수/필드 에 담아 반환하는 태그

keyProperty

key를 담을 변수/필드 지정하는 속성

order

INSERT/UPDATE에 작성된 메인 SQL이 수행되기 전(BEFORE) 또는 후(AFTER)에
<selectKey> 내부 SQL이 수행되도록 순서를 지정하는 속성

	<insert id="insertBoard" parameterType="detail" useGeneratedKeys="true">
		<selectKey keyProperty="boardNo" resultType="_int" order="BEFORE">
			SELECT SEQ_BOARD_NO.NEXTVAL FROM DUAL
		</selectKey>
		INSERT INTO BOARD VALUES( 
			#{boardNo}, #{boardTitle}, #{boardContent}, 
			DEFAULT, DEFAULT, DEFAULT, DEFAULT, #{memberNo}, #{boardCode}
		)
	</insert>

동적 SQL중 <foreach>

특정 SQL 구문을 반복할 때 사용
반복되는 사이에 구분자(separator)를 추가할 수 있음.

collection : 반복할 객체의 타입 작성(list, set, map)

item : collection에서 순차적으로 꺼낸 하나의 요소를 저장하는 변수

index : 현재 반복 접근중인 인덱스 (0,1,2,3,4..)

open : 반복 전에 출력할 sql

close : 반복 종료후에 출력할 sql

separator : 반복 사이사이 구분자

	<insert id="insertBoardImageList" parameterType="list">
	INSERT INTO BOARD_IMG 
		SELECT SEQ_IMG_NO.NEXTVAL IMG_NO,  A.* FROM(
		
			<foreach collection="list"  item="img" separator="UNION ALL" >
			    SELECT  #{img.imageReName}     IMG_RENAME, 
			    		#{img.imageOriginal}   IMG_ORIGINAL,
			        	#{img.imageLevel}      IMG_LEVEL, 
			        	#{img.boardNo}         BOARD_NO
			    FROM DUAL
			</foreach>
		) A
	</insert>
profile
안녕하세요!

0개의 댓글