728x90
반응형

iBatis를 사용해서 쿼리작업을 하면 아래와같은 장점이 있다.

      1. xml로 sql을 관리하므로 가독성이 높아진다.

      2. db연결 정보도 conf로 관리하므로 수정하기 쉬워지며

      3. 그래서 코드내에서 여러개의 db에 선택적으로 접근하기도 수월하다.(테스트/실장비 자유롭게 왔다갔다~)

      4.ORMap을 해주기때문에 결과를 가져올때도 사용하기가 쉽다.

 

xml의 statement 내에서 변수들을 받을때 '#' 를 사용해서 변수를 접근한다.

그러나 테이블명/필드명들을 접근할때는 '$' 를 사용한다.

      select * from $tablename$

이런식으로..

 

 

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

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

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

 

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

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

 

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

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

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

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

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

project.build.sourceencoding  (0) 2013.09.16
ibatis <dynamic>,<prepend>  (0) 2013.09.13
Ibatis 동적쿼리  (0) 2013.09.12
HashMap<k,v>  (0) 2013.09.12
리눅스 명령어  (0) 2013.09.11

+ Recent posts