출처 : http://lonelycat.tistory.com/289
<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>