Web/스프링

[ibatis] select 하는 컬럼이 유동적일 경우

벨포트조던 2018. 10. 17.
반응형

그런데, 여기서 테이블명이 바뀌면 읽어오는 필드명도 보통은 달라지게마련..

iBatis는 내부적으로 읽어온 결과의 metadata를 저장해두는데

읽어온 필드명이 달라지면 이전의 metadata와 mapping이 되지않아 에러를 발생시킨다.

 

이럴때 statement의 attribute로 "remapResults=true"를 추가해줘야 한다.

이렇게 되면 매번 metadata를 세팅하므로 사실은 오버헤드가 있지만 에러는 발생하지 않는다.

 

문서들을 찾아보면 이 오버헤드 때문에 꼭 필요한 경우가 아니면 이 attribute를 활성화하지 말라고 되어있는데

실제로 아래 두가지 경우를 테스트 했을때 속도차는 별로 없었다.

1. remapResults=true로 하고 두개의 테이블에 번갈아가면서 접근한것

2. 각각의 테이블로 가는 sql을 따로 두개 작성한후에 remapResults=false로 해놓고 번갈아가면서 접근한것

[출처] iBatis에서 remapResults=true|작성자 줄리

========================================================================================================

 

조건절이 유동적인 경우는 dynamic sql을 사용하면 되지만

컬럼이 유동적인 경우는 난감이다.

 

Warning

지금 사용할 ibatis는 부하가 무진장 가해지는 소스이므로

윗선의 confirm을 받고 사용하는 것이 뒷탈없음...

그리고 절박한 상황이 아니면 절대 사용하지 말아야 할 소스.

 

 

  <select id="get" parameterClass="hmap" resultClass="hmap" remapResults="true" >
    SELECT $colNm$
      FROM A_MAST 
    WHERE  A_KEY   > ' '  
  <include refid="queryWhere"/>
  ORDER BY A_KEY   
  </select>

 

1.$colNm$
쿼리 전 단계에서 colNm에 컬럼명 setting하여 map에 담아 넘길 것 

String  colNm  = "";

          colNm  +=","+values;

 hmap.put("colNm  ", colNm  );

주의... 메모리가 엄청 소비된다고 하니 이 방법외의 대안이 없는 경우 사용할 것

 

2. remapResults="true"

이렇게 컬럼이 유동적인 경우 처음 실행한 컬럼이 메모리에 남아 다른 컬럼을 인식하지 못하므로

이 속성을 사용할 것

단, 이 조건은 메모리를 엄청 잡아먹는다고 하니 주의 !!!!!



https://m.blog.naver.com/PostView.nhn?blogId=whitefre&logNo=140094624043&proxyReferer=https%3A%2F%2Fwww.google.com%2F




------------------------------------------------------------------------------------------------------------------------------------------------------

동적으로 컬럼이 바뀔경우는 remapResults 값을 줘야한다. 


이건 cache와 다른 느낌. 


값의 변경에서는 보통 캐쉬타지 않는데 컬럼의 동적변화에서는 remapresults를 주던가 서버를 재기동해야한다.



https://kldp.net/kfwdp/release/1766-iBATIS-SqlMaps-2_ko.pdf

반응형

'Web > 스프링' 카테고리의 다른 글

SLF4J with Log4j2 example xml 설정  (0) 2018.11.22
[ ibatis ] batch 기능  (0) 2018.10.29
ibatis 문서  (0) 2018.10.17
spring classpath 설정하는 방법  (0) 2018.09.20
spring properties jsp 에서 사용하기. [ 다국어 ]  (0) 2018.08.29

댓글