<statement id="CHECK_SUB_CONTENT_TYPE_FOR_DELETE" resultClass="java.lang.String"> SELECT COUNT(*) TOTAL_COUNT FROM SUB_CONTENT_TYPE <iterate prepend="WHERE" property="deleteContentTypeList" open="(" conjunction="," close=")"> CONTENT_TYPE IN #deleteContentTypeList[]# </iterate> </statement> |
<statement id="CHECK_SUB_CONTENT_TYPE_FOR_DELETE" resultClass="java.lang.String"> SELECT COUNT(*) TOTAL_COUNT FROM SUB_CONTENT_TYPE <iterate prepend="WHERE CONTENT_TYPE IN " property="deleteContentTypeList" open="(" conjunction="," close=")"> #deleteContentTypeList[]# </iterate> </statement> |
<statement id="CHECK_SUB_CONTENT_TYPE_FOR_DELETE" parameterClass="java.util.List" resultClass="java.lang.String"> SELECT COUNT(*) TOTAL_COUNT FROM SUB_CONTENT_TYPE <dynamic prepend="WHERE"> <iterate property="deleteContentTypeList" open="(" conjunction="," close=")"> CONTENT_TYPE IN #deleteContentTypeList[]# </iterate> </dynamic> </statement> |
버근지 뭔지 몰라도 위의 방식은 하나도 안된다. property속성을 쓰면 안되는건지...
근데 되는 사람들도 있는 것 같고..
<statement id="CHECK_SUB_CONTENT_TYPE_FOR_DELETE" resultClass="java.lang.String"> SELECT COUNT(*) TOTAL_COUNT FROM SUB_CONTENT_TYPE <dynamic prepend="WHERE"> <iterate open="CONTENT_TYPE IN (" close=")" conjunction="," > #[]# </iterate> </dynamic> </statement> |
이것처럼 아예 property 속성을 없애고, list의 이름을 없이 하면 잘됨.
참고:http://lostsin.tistory.com/tag/iBATIS
sql의 xml설정은 다음과 같이 하고 <delete id="deletes" > DELETE FROM users <dynamic prepend="WHERE id IN"> <iterate open="(" conjunction="," close=")"> #[]# </iterate> </dynamic> </delete> DAO는 다음과 같이 한다 public int delete(Integer[] ids) { return getSqlMapClientTemplate().delete("users.deletes", ids); } 해당 쿼리는 <iterate> 구문에 의하여 WHERE id IN (1,2,3,4,5) 방식으로 값이 매핑되게 된다. 보너스1. List<>를 사용하는 방법도 xml 쿼리 부분은 동일하다. List<String> list = new ArrayList<String>(3); 보너스2. parameterClass="map" 을 사용할 땐 WHEREhash의 key 값으로 사용된 string을 지정해주면 된다 (?) |
추가.
HashMap map = new HashMap(); map.put("deleteContentTypeList", deleteContentTypeList); map.put("updateId", updateId); map.put("updateTime", updateTime); this.update("contenttype.DELETE_CONTENT_TYPE", map); |
<statement id="DELETE_CONTENT_TYPE"> UPDATE CONTENT_TYPE SET STATUS = 'D' , UPDATE_ID = #updateId# , UPDATE_TIME = #updateTime# <dynamic prepend="WHERE"> <iterate property="deleteContentTypeList" open="CONTENT_TYPE IN (" close=")" conjunction=","> #deleteContentTypeList[]# </iterate> </dynamic> </statement> |
이건 또 된다. map에 넣어서 넘겨주면 멀쩡히 잘 되는군...
# 추가
list 를 패러미터로 전달 시 iterate 태그에서 property 를 설정하면(map으로 넘겼을 떄 말고),
전달된 list 에서 해당 property 를 찾으려고 시도하는 것 같다.
<iterate> 태그에서 property 속성을 제거하면 정상적으로 작동한다.
<select id="selectSomething" parameterClass="list">
// select something and use iterate
<iterate> // iterate 태그 내 property 속성을 제거하라
#someList[]#
</iterate>
</select>
'프로그래밍 > Framework' 카테고리의 다른 글
[Struts2] <s:checkbox> 사용법 (0) | 2009.05.08 |
---|---|
[iBatis] queryForMap() 사용법 (0) | 2009.04.21 |
[Struts2] <s:iterator> <s:if> 사용법 (0) | 2009.04.13 |
[iBatis] 동적쿼리에서 ORDER BY 하기 (0) | 2009.04.13 |
[iBatis] 동적쿼리문 생성 (0) | 2009.04.13 |