리스트 파라메터의 foreach 사용방법에 대해서는 아래 게시글을 참고해주세요.
시퀀스를 키값으로 갖는 테이블의 데이터를 INSERT할 때, 보통 시퀀스를 생성하여 아래와 같이 추가한다.
<insert id="insCustomer" parameterType="customerVO">
<selectKey keyProperty="customerSeq" resultType="String" order="BEFORE">
SELECT CUSTOMER_SEQ.NEXTVAL AS customerSeq FROM SYS.DUAL
</selectKey>
INSERT INTO WEB_G_CUSTOMER (
CUSTOMER_SEQ
, CUSTOMER_DIV
, EMAIL
, PASSWORD
, TITLE
, CONTENT
, REG_DT
, PROGRESS_CD
) VALUES (
#{customerSeq}
, '4'
, #{email}
, #{password}
, #{title}
, #{content}
, SYSDATE
, #{progressCd}
)
</insert>
그렇다면, 파라메터가 리스트인 경우는 시퀀스를 어떻게 가져와서 저장해야할까?
구조상 INSERT를 할때마다 시퀀스의 NEXTVAL값을 가져와서 추가를 해야하는데,
foreach 태그 내 selectKey 태그를 사용하면 아래와 같은 에러가 뜨는 것을 확인할 수 있다.
The content of element type "foreach" must match "(include|trim|where|set|foreach|choose|if|bind)".
그렇다면 시퀀스 자동증가 테이블의 리스트 파라메터를 INSERT할 때는 다음과 같이 하면 된다 !
<update id="insFileList" parameterType="java.util.List">
INSERT INTO WEB_G_FILE (
FILE_SEQ
, FILE_PATH
, REAL_FILE_NM
, FILE_NM
, FILE_EXTENSION
, FILE_SIZE
, REG_DT
, USE_YN
, BOARD_SEQ
, BOARD_DIV
)
SELECT FILE_SEQ.NEXTVAL AS fileSeq
, T.*
FROM (
<foreach collection="list" item="item" index="index" separator="union all">
SELECT #{item.filePath} as filePath
, #{item.realFileNm} as realFileNm
, #{item.fileNm} as fileNm
, #{item.fileExtension} as fileExtension
, #{item.fileSize} as fileSize
, SYSDATE as regDt
, 'Y' as useYn
, #{item.boardSeq} as boardSeq
, '4' as boardDiv
FROM SYS.DUAL
</foreach>
) T
</update>
시퀀스 생성방법을 모른다면 다음 게시글을 참고하자 !
'study > java' 카테고리의 다른 글
[Web] 415 (Unsupported Media Type) 오류 원인 살펴보기 (0) | 2023.07.12 |
---|---|
[Oracle] OUTER JOIN 사용 방법과 차이점 (LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN) (0) | 2023.07.12 |
[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle (0) | 2023.07.12 |
[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL (0) | 2023.07.12 |
[MyBatis] SpringBoot MyBatis 쿼리 로그 설정하기 (0) | 2023.07.12 |