참조: http://openframework.or.kr/Wiki.jsp?page=QueryForMapExample
위와 같은 iBatis sql문에 대해 다음과 같이 쿼리.
파라미터는 null이고, 쿼리 결과를 Map으로 받는데 키는 id에 대응하는 ACC_ID 칼럼값이 된다.
테이블에서는 모든 값(칼럼)을 가져와서 Accout 클래스형으로 값을 저장.
즉, key=ACC_ID칼럼값, value=Account클래스의 형태의 Map이 된다.
역시 파라미터는 null이고 결과를 Map으로 받는데, 키는 id에 대응하는 ACC_ID 칼럼값이며,
값은 emailAddress에 대응하는 ACC_EMAIL칼럼값만 가져온다.
즉, key=ACC_ID칼럼값, value=ACC_EMAIL칼럼값의 형태의 Map이 된다.
두번째 사용법.
위와 같이 resultMap이 없는 경우.
파라미터명으로 써있는데로, 실제 칼럼명 자체를 파라미터로 넘겨준다.
중요.
위의 두번째 사용법에서 resultClass에 주목.
queryForMap은 결과를 map으로 돌려주는 것이므로, 위의 쿼리 결과는 SequencedHashMap이 Map안에 들어간 형태로 나와버린다?
이건 아닌 듯. resultClass 속성을 삭제하면 결과가 String으로 나와버림.
원하는 key-value형태로 나오지 않음.
java.util.HashMap(Map아님. interface라 안되는듯)으로 하면, ORDER BY 해도 순서가 제멋대로.
org.apache.commons.collections.map.ListOrderedMap로 해도 순서가 제멋대로.
즉, 키-값으로 넣을 수 있는 것이 반드시 resultClass 또는 resultMap 속성에 와야 하지만, 그렇다고 순서를 보장하진 않음.(Map답네..)
<resultMap id="AccountResult" class="Account">
|
위와 같은 iBatis sql문에 대해 다음과 같이 쿼리.
queryForMap("selectAllAccounts", null, "id"); |
파라미터는 null이고, 쿼리 결과를 Map으로 받는데 키는 id에 대응하는 ACC_ID 칼럼값이 된다.
테이블에서는 모든 값(칼럼)을 가져와서 Accout 클래스형으로 값을 저장.
즉, key=ACC_ID칼럼값, value=Account클래스의 형태의 Map이 된다.
queryForMap("selectAllAccounts", null, "id", "emailAddress"); |
역시 파라미터는 null이고 결과를 Map으로 받는데, 키는 id에 대응하는 ACC_ID 칼럼값이며,
값은 emailAddress에 대응하는 ACC_EMAIL칼럼값만 가져온다.
즉, key=ACC_ID칼럼값, value=ACC_EMAIL칼럼값의 형태의 Map이 된다.
두번째 사용법.
<statement id="getContentType" resultClass="org.apache.commons.collections.SequencedHashMap"> SELECT * FROM OMPDBA.CONTENT_TYPE WHERE STATUS = 'U' </statement> |
위와 같이 resultMap이 없는 경우.
queryForMap(sqlId, paramMap, keyColumn, valueColumn); |
파라미터명으로 써있는데로, 실제 칼럼명 자체를 파라미터로 넘겨준다.
중요.
<statement id="SELECT_SERVICE_TYPE" resultClass="java.util.HashMap"> SELECT a.SERVICE_TYPE, b.SERVICE_TYPE_NAME FROM CONTENT_SERVICE_SYSTEM a, SERVICE_TYPE b WHERE a.SERVICE_TYPE = b.SERVICE_TYPE AND a.CONTENT_TYPE = #PARAM0# AND b.STATUS = 'U' ORDER BY b.DISPLAY_ORDER ASC </statement> |
위의 두번째 사용법에서 resultClass에 주목.
queryForMap은 결과를 map으로 돌려주는 것이므로, 위의 쿼리 결과는 SequencedHashMap이 Map안에 들어간 형태로 나와버린다?
이건 아닌 듯. resultClass 속성을 삭제하면 결과가 String으로 나와버림.
원하는 key-value형태로 나오지 않음.
java.util.HashMap(Map아님. interface라 안되는듯)으로 하면, ORDER BY 해도 순서가 제멋대로.
org.apache.commons.collections.map.ListOrderedMap로 해도 순서가 제멋대로.
즉, 키-값으로 넣을 수 있는 것이 반드시 resultClass 또는 resultMap 속성에 와야 하지만, 그렇다고 순서를 보장하진 않음.(Map답네..)
'프로그래밍 > Framework' 카테고리의 다른 글
[Struts2] Model-driven interceptor (0) | 2009.05.27 |
---|---|
[Struts2] <s:checkbox> 사용법 (0) | 2009.05.08 |
[iBatis] iterate 사용법 (1) | 2009.04.13 |
[Struts2] <s:iterator> <s:if> 사용법 (0) | 2009.04.13 |
[iBatis] 동적쿼리에서 ORDER BY 하기 (0) | 2009.04.13 |