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

+ Recent posts