- iBatis Data Mapper Framework란
- Version 2.3.0.677 기준
- 소개
iBatis Data Mapper Framework는 일반적인 관계형 데이터베이스에 접근할 때 필요한 자바코드를 현격하게 줄일수 있도록 도와준다.
iBatis는 매우 간단한 XML Descriptor를 사용하여 SQL statemnt를 간단하게 JavaBeans와 mapping시킨다.
간단함은 다른 Framework이나 ORM Tool들 보다 큰 장점이 된다 .
iBatis
Data Mapper 를 사용하기 위해서는 JavaBeans, XML ,SQL과 와 친숙해야 한다. 만은 양의 스킬을
요구하는 것은 아니며, Join Table절이나 복잡한 Query를 수행하거나 복잡한 Schemae를 요구하는 정도는 아니다는
말이 된다.
iBatis Data Mapper를 사용하므로 사용자는 간단한 Query를 파워풀하게 사용할 수 있을 것이다.
- 개념
iBatis Data Mapper Framework API는 프로그래머에게 쉽게 JavaBeans Object를 PreparedStatement parameter 와 ResultSet에 mapping하는 방법을 제공한다.
기본 개념의 사상은 간단함을 제공하기 위함이다. 이 말은 JDBC Code의 기능적인 부분 20%만 활용하여 80%만큼의 기능을 제공하고자 함에 있다.
- 어떻게 작동이 되는가?
Data
Mapper provider는 XML descriotor를 JavaBeans에 mapping 그리고 , Map
implementation , Wrapper Type활용 , XML Document 를 SQL statement에 활용하는 매우
간단한 Framework이다.
다음은 상위 level Descriotion 의 생명 주기를 보여준다.
1. parameter로 JavaBeans , Map , 기본적인 Wrapper 들을 제공한다. 이 parameter Object는 updae Statement또는
기타 Query문의 where 절에 input value를 set하기 위해 사용된다.
2. mapping된 statement를 Execute하기 위해 사용된다. 이 단계에서 magic 이 실행되는데,
Data Mapper Framework은 preparedStatement instance를 생성하며 , 제공된 parameter Object를 parameter를
set하고 statement를 실행 한 후 ResultSet으로부터 Result Object를 생성한다.
3. update의 경우에는 영향을 받은 개수가 반환되며 , 일반적인 Query의 경우 single Object
또는 collection Framework Object를 반환한다. parameter와 같이 반환 Object는 JavaBeans , Map ,
기본적인 Wrapper 타입 그리고 XML이 될 수 있다.
< 아래의 그림은 Flow를 나타낸다 >
- install
iBatis Data Mapper Framework을 설치 하기 위해서는 간단하게 적절한 JAR파일을 classpath상에 잡어 주기만 하면 된다.
또
한 ,( java -cp argument) 명령을 사용하여 VM 시작 시간에 옵션을 지정하여도 되며 , WEB
Application은 /WEB-INF/lib 폴더에 jar파일을 위치 시켜도 된다. classpath의 자세한 내용은 본
내용에서 다룰 부분은 아니므로 생략한다.
그리고 java혹은 classpath에 관한 내용들에 대해서는 다음의 문서들을 참조 하기 바란다.
http://java.sun.com/j2se/1.4/docs/tooldocs/win32/classpath.html
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html
http://java.sun.com/j2se/1.4.2/docs/
iBatis는 single JAR파일을 제공한다. 그리고 JAR의 파일명은 다음과 같은 형식으로 제공된다.
ibatis-version.build.jar예를 들어 ibatis-2.3.0.677.jar 가 해당된다.
일반적으로 application의 classpath에만 충분히 위치시키기만 하면 된다.
- JAR 파일과 의존성
다
른 Framework과 많은 의존성을 가지게 되면 application 통합에 있어 어려움을 겪게 된다. 2.0의 key
point는 의존성 관리와 감소에 있다. 따라서 JDK1.4의 버전의 경우 다른Jar에 의존성이 필요가 없으며 , 선택적으로
다음의 JAR파일들은 해당 WebSite에서 다운로드 받을 수 있다. 기능별로 그룹화가 되어 있으며 아래의 리스트는 선택적으로
package목록이다.
- 1.x에서 Upgrade 하기
Upgrade를 할 것인가?
Upgrade를 결심했다면 시도 해보는 것이 가장 좋은 방법이며 , 다음과 같은 몇가지 방법들이 존재한다.
1. Version 2.0은 1.x Release와 거의 완벽하게 호환이 되도록 유지된다. 그래서 몇몇 사람들은 JAR파일 교체만으로 충분할
수 있다. 이 방법은 가장 간단할 뿐 아니라 가장 이득이 적다. Java Coe와 XML을 수정할 필요가 없으며 호환이 안되는
부분이 발생할 수 있다.
2. 두번ㅤㅉㅒㅤ 옵션은 XML 파일들을 2.0 specification에 맞게 바꾸어 주는 것이다. 그러나 1.x 의 Java API는 그대로 사용
해야 한다. 이 방법은 file mapping하는데 있어서 적은 호환성 문제가 야기 되는 안전한 방법이다(거의 발생 안함)
Framework에는 XML 파일을 변경해주는 ant Task를 포함되어 있다.
3. 세번째 옵션은 XML File( #2 참조 )들과 Java Code를 변경하는 것이다. Java Code를 변경해주는 Tools는 없음 따라서
손으로 변경해야 한다.
4. 네번째 방법은 전혀 Upgrade를 하지 않는 방법이다. 어려움을 겪고 있다면 두려워 말고 개발 System을 1.x Release로
남겨 놓자. 기존의 1.x Release는 그대로 남겨 놓은 채 신규 Application만 2.x로 시작하는 것은 나쁜 방법이 아니다.
문론 , 오래된 Application이 무겁게 인지되는 시점을 넘도록 Refactoring 되었다면 , 어찌 되었든 Data Mapper를
Upgrade를 하자.
- 1.x 에서 XML Configuration Files 2.x로 변경하기
2.0
Framework은 Ant build System을 이용한 XML Document 변환기가 존재한다. 1.x code를 완벽한
선택옵션에 의해서 XML Document를 변경하는 작업은 순식간에 일어난다. files들을 한번쯤은 편안함을 위해
Upgrade할 생각을 갖는거은 좋은 생각이다.
몇몇 issue들을 경험할 수도 있지만 아직도 1.x의 API를 사용하더라도 새로운 특징의 이점들 또한 있을 것이다.
ant Task는 build.xml파일에 다음과 같이 보일것이다.
<taskdef name="convertSqlMaps" classname="com.ibatis.db.sqlmap.upgrade.ConvertTask" classpathref="classpath"/>
<target name="convert">
<convertSqlMaps todir="D:/targetDirectory/" overwrite="true">
<fileset dir="D/sourceDirectory/">
<include name="**/maps/*.xml"/>
</fileset>
</convertSqlMaps>
</target>
위
에서 볼 수 있듯이 정확하게 ant의 copy Task와 같이 수행한다. 그리고 사실 ant의 copy Task를 확장하였기에
copy를 해야하는 작업들을 어떤것이나 당신은 할 수가 있다.( 자세한 내용은 ant의 copy Task Document 를
참조 )
Jar File들 : 이전 것들을 빼내고 , 새로운 것들을 넣자.
Upgrad
할 때 , iBatis의 오래된 파일들과 Dependency들을 제거하고 새로운 파일들로 교체하는 것은 좋은 생각이다. 다른
필요한 Framework이나 Component를 삭제하기 않도록 주의해야 한다. 대부분의 Jar파일들은 순환적으로 의존적임에
명심해야 한다.
Jar파일과 Dependency에 대한 논의된 부분을 참조하기 바란다.
- 아래는 오래된 파일과 신규 파을들을 요약한 것이다.
Old Files | New Files |
iBatis-db.jar 1.2.9b Release부터 다음의 3개 file로 분할되었다. ibatis-common.jar ibatis-dao.jar ibatis-sqlmap.jar | ibatis-version.buid.jar(필수) |
commons-logging.jar commons-logging-api.jar commons-collections.jar commons-dbcp.jar commons-pools.jar oscache.jar jta.jar dbcp2_0-stdext.jar xercesImpl.jar xmlParseAPIs.jar jdom.jar | commons-logging-1-0-3.jar (선택) commons-collections-2-1.jar (선택) commons-dbcp-1-1.jar (선택) commons-pool-1-1.jar (선택) oscache-2-0-1.jar (선택) jta-1-0-1a.jar (선택) jdbc2_0-stdext.jar (선택) xercesImpl-2-4-0.jar (선택) xmlParserAPIs-2-4-0.jar (선택) xalan-2-5-2.jar (선택) Log4j-1.2.8.jar (선택) cglib-full-2-0-rc2.jar (선택) |