상세 컨텐츠

본문 제목

MyBatis (foreach문, in절)

Spring

by husks 2016. 7. 6. 14:31

본문

반응형

Spring 과 mybaits 사용시 in 에 조건을 넣기 위해 foreach를 사용합니다.

 

그리고 조건 데이터를 넘겨줄때는 parameter에 리스트로 전달하면 됩니다.

 

하지만 일반적으로 in 에 들어가는 조건 이외에 단순한 String 값도 같이 넣어 조회 하게 됩니다.

 

방법은 Map을 선언시 <String, Object> 로 선언하고 Object에 list를 넣어주고 query 부분에서 리스트를 foreach 돌려 사용하면 됩니다.

 

아래 소스를 보시면 이해하기 쉬울껍니다.

 

DAO 부분에서 책 정보를 가져오도록 작성

public List<Books> getBooksInfo() {
            
    Map<String, Object> param = new HashMap<String, Object>();
 
    param.put("id", "1"); //#{id}에 셋팅
    param.put("name", "victor"); //#{name}에 셋팅
    
    List<String> codeList = new ArrayList<String>();
 
    codeList.add("01"); //in 조건에 넣을 정보
    codeList.add("05");
    
    param.put("code_list", codeList); //map에 list를 넣는다.
    
    return sqlSession.selectList("selectBooksInfo", param);
    
}

 

반응형

query xml 부분에서 foreach 로 in절에 리스트를 돌림

<select id="selectBooksInfo" resultType="kr.co.husk.Books" parameterType="java.util.HashMap">
    select
        price,
        discount_price
    from
        books
    where
        id = #{id} 
        and name = #{name}
        <choose>
            <when test="code_list.size != 0">
                and book_code in 
                <foreach collection="code_list" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
</select>

위에 작성한 프로그램이 제대로 실행되면 아래와 같은 쿼리가 실행 되겠죠.

select
	price,
	discount_price
from
	books
where
	id = '1' 
	and name = 'victor'
	and book_code in ('01','05')
반응형

관련글 더보기

댓글 영역