kimmgamjja

[Mybatis] Mybatis foreach문 본문

공부/Sql

[Mybatis] Mybatis foreach문

인절미댕댕이 2025. 1. 23. 16:07
728x90

foreach문

<foreach collection="test" item="item" open="(" close=")" separator="OR">
	(C.BRANCH LIKE CONCAT('%',TRIM('${item}'),'%') OR C.PHONE LIKE CONCAT('%',TRIM('${item}'),'%'))
</foreach>

 

mybatis foreach문 지원 태그

- collection : 전달받은 인자. 배열(Array) 혹은 리스트(List) 형태만 가능

ex)

배열 예시

String[] testArray={"1", "2", "3"}

 

- 배열 파라미터를 Map을 통해 넘겼을 경우

1. DAO

public List<Members>getTestList(String[] userArray) {
    HashMap<String, Object> map =new HashMap<String, Object>();
    map.put("testArray",testArray);
    return sqlSession.selectList("getTestList", map);
}

 

 

 

2. mapper.xml

<select id="getTestList"  resultType="members">
    SELECT * FROM TEST 
    WHERE PHONE IN
    <foreach collection="testArray" item="arr" open="(" close=")" separator=",">
        #{arr}
    </foreach>
</select>

 


 

- 배열 파라미터를 직접 넘겼을 경우   

1. DAO

public List<Members>getTestList(String[] userArray) {
	return sqlSession.selectList("getTestList", testArray);
}

 

2. mapper.xml

→    foreach collection 에서 collection을 꼭 array 로 작성하기

<select id="getTestList"  resultType="members">
	SELECT * FROM TEST 
	WHERE PHONE IN
	<foreach collection="array" item="arr" open="(" close=")" separator=",">
	 	#{arr}
	</foreach>
</select>

리스트 예시

List<Test> testList = testService.getTestList();

 

- 리스트를 Map을 통해 넘겼을 경우   

-  리스트 안에 뽑고 싶은 결과값을 {key.value} 형태로 

1. DAO

public List<Members>getTestList(List<Test> testList) {
    HashMap<String, Object> map =new HashMap<String, Object>();
    map.put("testList", testList);
    return sqlSession.selectList("getTestList", map);
}

 

2. mapper.xml

→   foreach collection 에서 collection을 꼭 넘겨주는 리스트의 변수값과 동일하게 작성

<select id="getTestList"  resultType="members">
	SELECT * FROM TEST 
	WHERE PHONE IN
	<foreach collection="testList" item="item" open="(" close=")" separator=",">
	 	#{item.phone_number}
	</foreach>
</select>

 


 

- 리스트 파라미터를 직접 넘겼을 경우

1. DAO

public List<Members>getTestList(List<Test> testList) {
	return sqlSession.selectList("getTestList", testList);
}

 

2. mapper.xml

→   foreach collection 에서 collection을 꼭 "list" 로 작성해야함

<select id="getTestList"  resultType="members">
	SELECT * FROM TEST 
	WHERE PHONE IN
	<foreach collection="list" item="item" open="(" close=")" separator=",">
	 	#{item.phone_number}
	</foreach>
</select>

 

 

 

mybatis foreach문 지원 태그

- item : 전달받은 인자 값을 alias 명으로 대체

- open : 구문이 시작될때 삽입할 문자열

- close : 구문이 종료될때 삽입할 문자열

- separator : 반복 되는 사이에 출력할 문자열

- index : 반복되는 구문 번호이다. 0부터 순차적으로 증가

 

 


https://java119.tistory.com/85

 

[MyBatis] 동적 쿼리 foreach문 문법 총 정리

시작하기에 앞서 참고 자료 *ibatis iterate문 지원 태그 property : 파라미터명 prepend : 쿼리로 쓰일 문자 open : 구문이 시작될때 삽입할 문자열 close : 구문이 종료될때 삽입할 문자열 conjunction : 반복되

java119.tistory.com

 

728x90