[mybatis] forEach

MyBatis foreach문 지원 태그

  • collection : 전달받은 인자. Map이나 배열객체와 더불어 List, Set등과 같은 반복가능한 객체를 전달할 수 있다
  • item : 전달받은 인자 값을 alias 명으로 대체
  • index : 반복되는 구문 번호이다. 0부터 순차적으로 증가
  • open : 구문이 시작될때 삽입할 문자열
  • close : 구문이 종료될때 삽입할 문자열
  • separator : 반복 되는 사이에 출력할 문자열
<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  WHERE ID in
      <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
            #{item}
      </foreach>
</select>

배열 param을 Map을 통해 넘겼을 경우

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

// user_mapper.xml
<select id="getAuthUserList"  resultType="members">
    SELECT 
        m.*
        ,a.name 
    FROM members AS m 
        JOIN authority AS a 
            ON m.authority = a.authority
    WHERE m.authority IN
        <foreach collection="userArray" item="arr" open="(" close=")" separator=",">
            #{arr}
        </foreach>
    ORDER BY m.authority;
</select>

배열 param을 직접 넘길 경우

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

// user_mapper.xml
<select id="getAuthUserList"  resultType="members">
    SELECT 
        m.*
        ,a.name 
    FROM members AS m 
        JOIN authority AS a 
			ON m.authority = a.authority
    WHERE m.authority IN
        -- 배열을 Mapds을 통해 넘길 때와는 다르게 collection의 값은 변수이름이 아닌 array를 입력해야한다
        <foreach collection="array" item="arr" open="(" close=")" separator=",">
                 #{arr}
        </foreach>
    ORDER BY m.authority;
</select>

레퍼런스

https://java119.tistory.com/85

https://devmoony.tistory.com/134

https://mybatis.org/mybatis-3/ko/dynamic-sql.html