순서
- Map<String, Object> 선언
- Object에 List 담기
- 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
댓글