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>
================================
역시 같은 결과....

클래스나 맵에 넣지 않고 넘기는 방법은? 실패... 이유는 모르겠다...







« PREV : 1 : ··· : 53 : 54 : 55 : 56 : 57 : 58 : 59 : ··· : 61 : NEXT »