[Mybatis] 동적쿼리 foreach 사용해서 delete
2021. 4. 8. 14:26
List에 담긴 상품번호를 이용하여 DB에 있는 상품들을 삭제하는 프로세스를 만들던 중
동적쿼리를 이용하다가 헷갈렸던 부분이 있어서 적어둔다
<String 타입의 숫자를 숫자 형태로 sql쿼리 넘기는 방법>
<delete id = "cartAllDel" parameterType = "List">
delete from cart where num in
<foreach collection="list" item="item" open="(" close=")" separator=",">
${item}
</foreach>
</delete>
일반적으로 문자열을 바로 처리할 수 있게끔 #{}을 통해서 파라미터를 처리해 왔지만
지금의 경우 나는 LIst에 String타입의 주문번호를 담고 있다.
만약 #{}을 통해서 쿼리를 구성하는 경우
delete from cart where num in ('12', '32) 처럼
숫자에 따옴표가 자동으로 처리되어 넘어가기때문에 syntax 에러가 발생하게 된다.
그렇기 때문에 이경우에는 ${}을 통해 따옴표가 자동으로 생성되지 않으므로
delete from cart where num in (12, 32)로 쿼리가 생성된다.
덧붙여서 foeach 속성의 의미는
collection : 전달받은 인자 (List or Array)
item : 전달 받은 인자 값의 alias
open : 구문이 시작될때 삽입할 문자열
close : 구문이 끝날때 삽입할 문자열
separator ; 반복 구문 사이에 삽입할 문자열
'skill > Mybatis' 카테고리의 다른 글
[Mybatis] HashMap #{} SQL Syntax에러 처리 (0) | 2021.03.23 |
---|