iBatis에서 동적쿼리에서 resultMap 컬럼이 존재하지 안는다면… remapResults=”true”

ibatis는 최초 쿼리를 조회 한후 조회 결과의 메타(Meta Data- 컬럼리스트, 테이블명)를 캐쉬에 저장하여 놓아
다음 동일 쿼리 호출시 해당 컬럼으로 데이타 결과를 보여 주어 성능 향상을 꾀하고 있다. 그러나 동적쿼리 사용시 문제가 발생 할 수 있다.

예) 정적: select a, b, c from 테이블명;
동적: select $컬럼목록변수$ from 테이블명;

위의 예문에서 정적쿼리로 컬럼명이 a, b, c 같이 고정 되어 있을 경우는 잇점이되나
$컬럼목록변수$ 와 같이 테이블 컬럼이 변경 될 수 있을 경우는 최초 조회결과의 컬럼명이 캐쉬에 저장된다. 따라서 $컬럼목록변수$ -> ‘a, b, c’ 컬럼을 지정하여 결과를 얻은 후
$컬럼목록변수$ -> ‘d, e, f’로 변수값을 변경하면 최초 ‘a, b, c’ 메타 캐쉬로 저장 되어 있기 때문에 ‘d, e, f’ 컬럼들을 찾을 수 없다는 아래와 같은 오류가 발생한다.

— The error occurred while applying a parameter map.
— Check the queryMap.inserTest-InlineParameterMap.
— Check the parameter mapping for the ‘keyCode’ property.

이럴때 메타데이터를 캐쉬에 저장 하지 말고 항상 쿼리조회시 컬럼을 맵핑하여 가져 오게 할 수 있는데 remapResults = true로 지정하여 주면 된다.

remapResults = true를 정적쿼리에 사용해도 되나 매번 매핑을 사용 하므로 메타데이터를 캐쉬에 저장 할 때 보다는 성능이 약간 저하 될 수 있다.

http://briele.tistory.com/61
http://jace.tistory.com/57

Leave a Reply

Your email address will not be published.