른록노트
[Mssql] Mybatis Dynamic Sql foreach 사용법 본문
1.1 문제상황
화면에서 checkIdx라는 체크박스를 받아와서 체크한 글만 삭제하는 기능을 만들려고 했는데
TestTable의 idx컬럼은 int 타입이고 checkIdx는 String 타입이라 in을 사용할 수가 없다.
1.2 예시
<delete id="deleteTest" parameterType="testVO">
DELETE TestTable where idx in (#{checkIdx})
</delete>
checkIdx 의 타입은 String 값은 84,85,86
DELETE TestTable where idx in ("84,85,86") => 에러 발생
2.1 해결
checkIdx의 타입을 String으로 이용해서 해결방법을 찾아보려했는데 정보가 많이 없었고
미래적인 측면에서 String 배열로 변경하여 Dynamic sql foreach를 사용하는게 좋겠다고 판단했다.
2.2 해결방법
먼저 testVO에서 checkIdx의 타입을 String[]로 변경하고 쿼리를 아래와 같이 변경해주었다.
<delete id="deleteTest" parameterType="testVO">
DELETE TestTable where idx in
<foreach item="data" index="index" collection="idx" open="(" separator="," close=")">
#{data}
</foreach>
</delete>
item = foreach 안에 태그에서 #{???}로 사용할 이름
index = foreach 안에 태그에서 #{???}로 사용할 인덱스명
collection = parameterType에서 전달하는 변수명
separator : foreach 문이 한번 돌고 다음번 돌때의 구분자
참고사이트
반응형
Comments