자바나라
[Mybatis] SQL 쿼리에서 array 를 foreach로 전개하는 법 / string과 type 구분하는 법 본문
문제상황 : boardId 라는 파라미터가 다중선택시엔 Array로, 단일 선택시에는 String으로 넘어오고 있다.
해결책 : 쿼리를 2개로 분리하는 방법도 해결책이 될 수 있겠지만,
향후 유지보수 용이성을 고려하여 파라미터의 type에 따라 동적으로 조회하는 쿼리를 짜보았다.
1. SQL 쿼리에서 array를 foreach로 전개하는 법
1
2
3
4
5
|
where boardId IN (
<foreach collection="boardId" index="index" seperator=" , ">
#{boardId[${index}]}
</foreach>
)
|
cs |
→ 이 쿼리에서 boardId에 String이 들어오는 경우 "boardId는 iterable 하지 않다." 는 문구가 뜬다.
프론트나 자바단에서 파라미터가 String인 경우 Array[0]에 넣는 전처리 로직을 추가하여 해결할 수도 있다.
그러나 필자의 경우는 SQL을 직접 call 하는 경우여서 전처리가 불가했고, 동적인 조회 쿼리가 필요했다.
2. Array와 String 의 type 구분하여 동적으로 조회하는 법
: Mybatis는 Java 기반으로 하기 때문에 Java의 메소드 사용이 가능하다.
따라서 instanceof 를 사용하면 쉽게 변수의 type을 쉽게 구분할 수 있다.
1
2
3
4
5
6
7
8
9
10
|
where boardId IN (
<if test = "!boardId instanceof String" >
<foreach collection="boardId" index="index" seperator=" , ">
#{boardId[${index}]}
</foreach>
</if>
<if test = "boardId instanceof String" >
#{boardId}
</if>
)
|
cs |
도움되셨길 바라며, 질문이나 오류는 댓글로 남겨주세요.
'오늘 배운 자바' 카테고리의 다른 글
[Java] BufferedReader & FileReader (0) | 2018.08.30 |
---|---|
자바 면접 준비 (0) | 2018.08.24 |
[Java_Spring] java.lang.IllegalArgumentException (0) | 2018.07.17 |
[JQuery] 자바스크립트 이벤트가 2회 중복 실행될 때 (0) | 2018.07.17 |
[JSP]게시글 하나에 여러개 사진 리스트 출력 (0) | 2018.07.09 |