Tech/SQL

iBatis 리스트형 데이터 IN절에 사용하는 방법

봄의 개발자 2024. 12. 5.
728x90
반응형

아파치에서 iBatis는 현재 더이상 개발되고 있지 않다. 그러나 여전히 현업에서 사용되는 경우가 많은 것 같다. 현재는 구글로 옮겨서 myBatis로 진행되고 있다. 
그렇기 때문에 모든 문법이 동일하진 않다. 특히 이번 글에서 다루는 <iterate>도 <foreach>로 바뀌었다.

List<String> list = new ArrayList<>();

list.add("test1");
list.add("test2");

Map<String, Object> sqlMap = new HashMap<>();
sqlMap.put("list", list);

// sqlMap을 해당 쿼리로 넘겨준다.

 

<SELECT id="selectList" parameterClass="java.util.Map" resultClass="java.util.HashMap">
    SELECT * FROM TABLE1
    WHERE
    1=1
    <isNotEmpty property="list">
        <iterate prepend=" AND TABLE_NAME IN" property="list" open="(" close=")" conjunction=",">
        	#list[]#
        </iterate>
    </isNotEmpty>
</SELECT>



<iterate> 태그를 사용해서 리스트이 반복 작업을 순서대로 처리할 수 있다. 특히 IN절에 리스트 값을 넣을 때 사용할 수 있다.
[] 표시는 각 반복에서 객체 하나를 의미한다. conjunction 속성은 하나의 반복이 끝나고 다음 순번으로 가기 전 중간에 붙여지는 구분자이다.
prepend는 iterate 전체 문자열 맨 앞에 한 번 붙여지는 접두사 역할이고, open과 close는 각 반복 앞 뒤에 붙여지는 것이다.

결국 실제 쿼리를 확인해보면 아래와 같다.

SELECT * FROM TABLE1
WHERE
1=1
AND TABLE_NAME IN ("test1", "test2");

 

리스트를 반복문에 사용하는 방법을 알아보았다.

처음엔 복잡하다고 생각했는데 막상 정리하고 보니까 사용법만 익숙해진다면 그렇게 어렵지 않게 사용할 수 있을 거 같다. 사실 맨날 in 절에 리스트 사용하는 부분에서 막히고 다시 찾아보고 이게 반복돼서 정리해본 거... ㅎㅎ

iBatis 사용하는 게 아직까진 재밌다고 한다 ~~

728x90
반응형

댓글