http://opensource.atlassian.com/confluence/oss/pages/viewpage.action?pageId=3057

remapResults="true"의 적절한 사용법#

remapResults 속성은 <statement>, <select>, 그리고 <procedure> 에서 사용가능하다. 이것은 선택적인 속성이고 디폴트 값은 false이다.

remapResults속성은 쿼리가 칼럼을 동적으로 반환할때 true로 셋팅되어야만 한다. 예를 들면, 다음의 쿼리를 보자.

SELECT $fieldList$
  FROM table

이 예제에서, 비록 테이블은 언제나 같지만 칼럼명의 목록은 동적이다.

SELECT *
  FROM $someTable$

이 예제에서, 테이블은 다를수 있다. SELECT내 * 의 사용으로, 결과 칼럼이 다를수 있기 때문이다.

결과 세트(result set) 메타데이터가 평범하지 않은것을 알아보기 위한 오버헤드로 인해, iBATIS는 마지막에 쿼리가 수행되는것이 무엇인지 기억할것이다. 이것은 위 예제와 유사한 상황내 문제를 생성할것이다.

remapResults사용에 의존한 첫번째 예제를 보자.

remapResults를 사용하지 않거나 remapResults="false"로 셋팅하기

$fieldList$ 를 "fld1, fld2" 로 셋팅하고 첫번째 쿼리를 수행하면. 다음과 같을것이다.

SELECT fld1, fld2
  FROM table

iBATIS는 fld1 와 fld2가 쿼리의 다음 수행시마다 결과세트가 될것이라고 가정하는 효과를 낼것이다. 애플리케이션이 $fieldList$를 "fld3, fld4"와 같은것으로 변경된다면 문제가 될것이다. iBATIS는 결과세트에서 fld1 와 fld2를 찾을수 없을뿐아니라, 부적절한 결과를 반환할것이다. iBATIS는 첫번째 수행에서 쿼리내 존재하지 않았기 때문에 fld3 와 fld4를 알지못한다.

remapResults="true"로 셋팅하기

iBATIS는 쿼리가 수행되는 매번 결과세트 메타데이터를 검사하고 언제나 적절한 결과를 반환할것이다. 이 기능은 몇가지의 성능상의 자원을 소모한다. 그래서 결과세트가 동적일 때와 같은 필요한 경우에만 사용하라.

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-4) was last changed on 09-May-2006 14:24 by 218.232.42.228