[JAVA] Mybatis, Ibatis LIST 파라미터 전달하기

2023. 6. 16. 18:30Programming/기술 정리


이번 이슈는 특정 테이블에서 동적으로 조건을 걸어 다량의 데이터를 가져오는 상황에서 발생하였다.

문제 해결을 위해 열심히 검색해보았으나, 많은 경우는 매퍼 xml파일의 파라미터를  map으로 주고 있었다.


그러나 나는 기존에 공통으로 파라미터를 VO로 사용하고 있던 sql에 조건을 더해서 사용해야 했고

검색을 여러가지 조합한 결과 다음 같은 해결 방안을 찾아냈다.




[해결 방법]


- VO 자바 파일

@Data
public class testVO {

private ArrayList<String> dataArr;
}



- 메소드 자바 파일

public void testMethod(){

ArrayList<String> makeParamList = new ArrayList<String>();

makeParamList.add("m00001");
makeParamList.add("m00002");
makeParamList.add("m00003");

testVO tvo = new testVO();
tvo.setDataArr(makeParamList);

List<testVO> getMberList = memberDAO.selectMberInfoList(tvo);
}





- xml 매퍼 파일


1. Mybatis - foreach 사용

<select id="selectMberInfoList" parameterClass="패키지.클래스명(ex : testVO)" resultClass="패키지.클래스명">

SELECT * FROM MEMBER M
WHERE 1=1
<iterate prepend="AND M.MEMBER_ID IN" open="(" close")" conjunction="," property="dataArr">#dataArr{}# </iterate>
</select>




2.Ibatis - iterator 사용

<select id="selectMberInfoList" parameterTYpe="패키지.클래스명(ex : testVO)" resultType="패키지.클래스명">

SELECT * FROM MEMBER M
WHERE 1=1
<if test="dataArr !=null">
AND M.MEMBER_ID IN
<foreach item="item" index="index" collection="dataArr" open="(" separator="," close=")">
        #{item}
</foreach>
</if>
</select>







+) LIST VO를 반복적으로 사용하기 위해서는 mybatis와 ibatis의문법이 아주 약간씩 다름을 명심하고 코드를 작성해야한다.