dynamic iterate 기능에 대해서..
Posted 2007. 10. 30. 15:38쿼리를 작성하다보면 조건절에 having이나 IN으로 넣어야 하는데...
이때 안에 들어가는 결과를 외부에서 가져다가 넣고자 할때 유용한것 같다.
예전엔 결과를 for문 돌리면서 "," 붙여가면서 String으로 넣었었는데...
Application으로 간단히 테스트 해보았다.
=============== Test.java==============
List<City>cityList = sqlMap.queryForList("getCityList");
String [] arrayStr = new String[cityList.size()];
for(int i = 0; i< cityList.size();i++) {
City city = cityList.get(i);
arrayStr[i] = city.getCountryCode();
}
City paramCity = new City();
paramCity.setCountryTypes(arrayStr);
List<City>cityListIterator = sqlMap.queryForList("getCityListIterator", paramCity);
========sqlMap.xml==============
<select id="getCityListIteratorSuccess" resultMap="cityResult" parameterClass="City">
SELECT ID, NAME, COUNTRYCODE, DISTRICT, POPULATION
FROM CITY
<dynamic prepend="WHERE COUNTRYCODE IN">
<iterate property="countryTypes" open="(" close=")" conjunction=",">
countryCode = #countryTypes[]#
</iterate>
</dynamic>
ORDER BY NAME
</select>
=================================
Result : OK 227Rows Returns...
Map으로 묶어서 넘길경우
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("arrStr", arrayStr);
<select id="getCityListIteratorSuccess2" resultMap="cityResult" parameterClass="map">
SELECT ID, NAME, COUNTRYCODE, DISTRICT, POPULATION
FROM CITY
<dynamic prepend="WHERE COUNTRYCODE IN">
<iterate property="arrStr" open="(" close=")" conjunction=",">
countryCode = #arrStr[]#
</iterate>
</dynamic>
ORDER BY NAME
</select>
================================
역시 같은 결과....
클래스나 맵에 넣지 않고 넘기는 방법은? 실패... 이유는 모르겠다...
'개발노트 > iBatis/myBatis' 카테고리의 다른 글
iBatis에서 Like 검색처리방법.... (1) | 2007.12.06 |
---|---|
iBATIS-SQLMaps 2.0 Tutorial.pdf(한글번역판) (0) | 2007.10.30 |
iBatis를 사용하면서 자주 발생하는 에러...중 하나 (0) | 2007.10.06 |
iBatis에서 insert된 자동생성값 알아오기 - MySQL버전 (0) | 2007.08.24 |
iBatis와 전통적인 ORM과의 차이점 (0) | 2007.08.21 |
- Filed under : 개발노트/iBatis/myBatis