예를들어, 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 |