<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 |