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')
댓글 영역