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로 해놓고 번갈아가면서 접근한것
[출처] iBatis에서 remapResults=true|작성자 줄리
'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 |