예를들어, DB에 insert를 10개 한다하면 나는 serviceimpl에서 for문을 10번 돌려가면서

 

insert를 했었다. 그러다보니 코드도 지저분해지는 것이 보이고 하여 MyBatis foreach를 접하게되었다.

 

MyBatis foreach문 지원 태그

 

collection : 전달받은 인자. List or Array 형태만 가능

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

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

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

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

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

 

예시)

1. 배열을 Map에 넣어 데이터를 보낼경우(mapper.xml에서 Collection은 DAO 변수와 일치시켜줘야한다!)

//DAO
public List<Members> getDeptList(String[] memArray) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("memArray",memArray);
		return sqlSession.selectList("getDeptList", map);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="memArray" item="arr" open="(" close=")" separator=",">
 #{arr}
</foreach>
ORDER BY m.emp_seq;
</select>

 

2. 배열을 직접 보낼경우(mapper.xml에서 Collection은 array로 작성해야한다!)

//DAO
public List<Members> getDeptList(String[] memArray) {
		return sqlSession.selectList("getDeptList", memArray);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="array" item="arr" open="(" close=")" separator=",">
 #{arr}
</foreach>
ORDER BY m.emp_seq;
</select>

 

3. List를 Map에 넣어 데이터를 보낼경우(mapper.xml에서 Collection은 DAO 변수와 일치시켜줘야한다!)

//DAO
public List<Members> getDeptList(List<Members> empList) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("empList",empList);
		return sqlSession.selectList("getDeptList", map);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="empList" item="list" open="(" close=")" separator=",">
 #{list.emp_seq}
</foreach>
ORDER BY m.emp_seq;
</select>

 

4. 리스트를 직접 보낼경우(mapper.xml에서 Collection은 list로 작성해야한다!)

//DAO
public List<Members> getDeptList(List<Members> empList) {
		return sqlSession.selectList("getDeptList", empList);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
 #{item.emp_seq}
</foreach>
ORDER BY m.emp_seq;
</select>

'DB' 카테고리의 다른 글

[MyBatis] RDBMS별 like 검색처리 방법  (0) 2020.06.13
[DB] Join의 종류  (0) 2020.05.30
[My-SQL] 날짜관련 함수 모음  (0) 2020.05.30

+ Recent posts