본문 바로가기
Backend/Java

[MyBatis] foreach문 : 파라미터에 배열/리스트 담기

by unknownomad 2022. 2. 13.

순서

  1. Map<String, Object> 선언
  2. Object에 List 담기
  3. Query에서 List를 foreach를 돌려 사용

 

예제1

//DAO
//DAO에서 Member 정보 가져오기
public List<Member> getMemberInfoDAO() {

    Map<String, Object> param = new HashMap<>();
    param.put("id", "1"); //#{id}
    param.put("email", "test@test.com"); //#{email}
    
    List<String> activeList = new ArrayList<>();
    activeList.add("A"); //쿼리의 in 조건에 넣을 값
    activeList.add("B");
    
    param.put("paramList", activeList); //Map에 List 담기
    
    return sqlSession.selectList("selectMemberInfo", param);
}

 

-- MyBatis - SQL.xml
-- SQL.xml의 조건절 in 안에서 foreach로 List 돌림
<select id="selectMemberInfo" parameterType="java.util.HashMap" resultType="xx.xx.xx.Member">
SELECT *
FROM MEMBER
WHERE 1=1
AND ID = #{id}
AND EMAIL = #{email}
<if test="list.size != 0">
    AND MEMBER_TYPE IN
        <foreach collection="list" item="item" index="index" separator=",", open="(", close=")">
            #{item}
        </foreach>
</if>
</select>

 

-- Executed Query
-- 실행되는 쿼리
SELECT *
FROM MEMBER
WHERE 1=1
AND ID = #{id}
AND EMAIL = #{email}
AND MEMBER_TYPE IN ('A', 'B');

예제2

//DAO
public List<Map<String, Object>> selectMemberInfo(List<String> paramList) {
    return selectList("member_selectMemberInfo", paramList);
}

 

-- MyBatis - SQL.xml
<select id="selectMemberInfo" parameterType="java.util.ArrayList" resultType="resultMap">
SELECT *
FROM MEMBER
WHERE 1=1
AND ID = #{id}
AND EMAIL = #{email}
<if test="list.size != 0">
    AND MEMBER_TYPE IN
    <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
        #{item}
    </foreach>
</if>
</select>

 


출처 : https://huskdoll.tistory.com/507

댓글