티스토리 뷰

동적 쿼리

iBatis는 기본적으로 이전 쿼리 결과의 메타데이터를 캐싱하는데 조회마다 컬럼이 달라지는 동적쿼리를 사용하는 경우 캐싱으로 인해 오류가 발생할 수 있다. 이 때 태그에 다음과 같은 속성을 추가하면 메타데이터 캐싱작업을 막을 수 있다.

 

iBatis

<remapResults="true">

 

iBatis DataMapper 2.0 Developer Guide

The remapResults attribute should be set to true when a query has a variable set of return columns. For example consider the following queries:
SELECT $fieldList$
FROM table

 

Mybatis

<flushCache="true" useCache="false">

 

MyBatis 3 – 사용자 가이드

flushCache 이 값을 true 로 셋팅하면 구문이 호출될때마다 로컬, 2nd 레벨 캐시가 지워질것이다(flush). 디폴트는 false이다.
useCache 이 값을 true 로 셋팅하면 구문의 결과가 2nd 레벨 캐시에 캐시 될 것이다. 디폴트는 true이다.

 

주의사항

캐시를 사용하지 않는 쿼리가 늘어나면 오버헤드가 증가할 수 있기 때문에 동적 쿼리에만 적용해야한다.

 

메타데이터 생성에 의한 오버헤드를 줄이기 위해 iBatis는 최근에 받은 쿼리 결과를 기억(캐싱)하는데 이로인해 동적 쿼리를 사용할 때 오류가 발생할 수 있다.

따라서, 결과 컬럼이 변경될 수 있는 동적쿼리에는 remapResults를 true로 주고 그렇지 않은 경우 false를 줘서 메타데이터 검사에 대한 오버헤드를 최소화해야한다.

 

 

iBatis DataMapper 2.0 Developer Guide

Since the overhead to introspect/determine the resultset metadata is not trivial, iBATIS will remember what was returned the last time the query was run. This creates problems in situations similar to the examples above, hence the possibility to do metadata introspection with every query execution.

So if the return columns can change set remapResults to true, else set remapResults to false to avoid the overhead of metadata introspection.

 

참조

iBatis 개발가이드

Mybatis org

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함