본문 바로가기

DB/iBatis

iBatis sqlMap 설정하기

SQL Map 설정 파일 (SqlMapConfig.xml)은 iBatis의 중심이 되는 파일이다. 
SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
  <properties resource="db.properties"/>

  <!-- 글로벌 설정 옵션 영역 -->
  <settings
    useStatementNamespace="false"
    cacheModelsEnabled="true"
    enhancementEnabled="true"
    lazyLoadingEnabled="true"
    maxRequests="32"
    maxSession="10"
    maxTransactions="5"
  />

  <!-- 트랜잭션 관리자 -->
  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="${driver}"/>
      <property name="JDBC.ConnectionURL" value="${url}"/>
      <property name="JDBC.Username" value="${user}"/>
      <property name="JDBC.Password" value="${pword}"/>
    </dataSource>
 </transactionManager>

<!-- SqlMap 파일 참조 -->
<sqlMap resource="org/apache/mapper2ii15/SqlMap.xml"/>

</sqlMapConfig>

1. <properties> 엘리먼트
<properties>엘리먼트는 이름/값 쌍으로 구성된 메인 설정 파일에 앞으로 사용될 설정을 지정하는 곳이다. 이것은 애플리케이션 개발에 매우 유용하다. 왜냐하면 환경 설정에 의존되는 공유 설정 내용에 분리되어 이용할 수 있도록 한다.
프로퍼티 파일을 이용하는 데는 2가지 방법이 있다. 각 속성은 다음과 같이 지정한다.

  • resource - 클래스 패스에 있는 자원 혹은 파일
  • url - Uniform Resource Locator(URL)
resource 속성을 이용할때 classloader은 애플리케이션의 클래스 패스에 있는 자원의 위치에서 값을 가져온다.
이것은 resource라고 불리며, 클래스 로더가 이값을 읽을 것이다. Java 도큐먼트는 이러한 방법으로 데이터파일에 접근을 하며, JAR파일 내의 엔트리까지 읽을 수 있다. 그리고 서로다른 컴퓨터의 내용도 읽을 수 있다.

URL 속성은 java.net.URL클래스에 의해서 핸들된다.

이전 예제는 <properties> 엘리먼트를 이용하여 db.properties로 불리는 파일을 classpath를 읽고 있다.

db.properties는 다음과 같이 지정한다.

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/test
user=root
pword=apple

이러한 파일을 로드하기 위해서 다음과 같이 기술한다.

<properties resource="db.properties"/>

마지막으로 지정된 값은 이렇게 이용한다.

<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${user}"/>
<property name="JDBC.Password" value="${pword}"/>

2. <setting> 엘리먼트
<setting>엘리먼트는 설정 옵션의 환경에 대한 설정이다. 이 설정값을 통해서 글로벌 SQL Map 인스턴스에 대해서 설정이 가능하다.

lazyLoadingEnabled
- 늦은 로딩은 가능하면 절대 경로를 이용하지 않고서 객체를 이용하기 위해서 사용한다. 이 값을 설장하면 관련된 스테이트먼트를 늦은 로딩을 이용하여 처리할 것인지 결정할 수 있다. 이 값은 true/false로 지정하며 기본값은 true이다. 이 기능은 1000명의 사용자가 25개의 아이템에 1000개의 작업을 처리하고자 할경우 25,000, 000개의 객체가 생성되어야 하고, 메모리에 이러한 객체를 가지고 있어야 하지만 늦은 로딩을 이용함으로 해서 2500개의 작업만 처리할 수 있도록 해주어, 자원과 속도의 향상을 가져오게 된다.

cacheModelsEnabled
- 캐싱은 성능향상을 위한 기술이다. 이것은 메모리 기반에서 수행됨을 의미한다. 캐시모델 설정을 하면 iBatis에서 캐싱을 수행할 수 있다. 이 값은 true/false를 설정하게 된다.

enhancementEnabled
- 이 설정은 cglib 옵티마이즈된 클래스를 이용하고자 할때 이용한다. 이것은 lazy loading를 수행하며, true/false에 의해서 지정이 가능한다.
- cglib는 iBatis에서 실행시간에 특정 함수를 생성하고, JavaBeans 프로퍼티를 설정하도록 한다.

useStatementNamespaces
- 이것은 매핑되는 문장의 컬리파이드 이름을 이용할것인지 설정하는 것이다. 이 값은 true/false를 지정하여 설정이 가능하며, 기본값은 false이다
- Sql 맵이 지정되면 팹의 이름은 쿼리파이드 이름으로 보통 이용된다.
- 예를 들어 SQL 맵 이름으로 Account라는 이름이 있다면 매핑된 구분의 이름이 insert, update, delete, getAll등으로 지정한다고 했을때, 이름을 이용하기 위해서는 Account.insert라는 매핑을 이용해야 접근할 수 있다. 그렇게 되면 매핑 충돌이 일어나지 않는다.
이것은 차후에 대규모 프로젝트를 수행할때 상당히 유용한 기능이 된다.

3. <typeAlias> 엘리먼트
org.apache.ibatis.jgamestore.domain.Account같은 이름의 타입이 사용되지 않고 작성되어 있다면 아무도 모를 것이다. <typeAlias>엘리먼트는 Account와 같은 앨리어스를 이용하여 퀄리파이드 이름을 대체하여 사용할 수 있도록 한다.
다음과 같이 지정할 수 있다.
<typeAlias alias="Account" type="org.apache.ibatis.jgamestore.domain.Account" />
Account 앨리어스는 설정을 수행하고 난후 쉽게 이용할 수 있다. 서정파일 내에서 재 사용이 가능하다.

4. <transactionManager> 엘리먼트
iBatis는 데이터베이스 접근을 간단하게 만들어 준다. 이것은 데이터베이스의 트랜잭션을 관리해 준다는 의미이다. 트랜잭션 관리를 할때 몇몇 지정된 트랜잭션 관리자가 이미 정의되어 있다. 이미 지정된 트랜잭션 관리자는  JDBC, JTA, EXTERNAL이 있다.
트랜잭션 관리자의 속성중에 commitRequired속성이 있다. 이것은 true/false로 지정이 가능하며 기본값은 false이다. 이것은 데이터베이스에서 접속해서 작업을 하고, 커넥션을 일리즈 할때, 반드시 commit나 rollback를 요구한다.

5. <property> 엘리먼트
각 트랜잭션 관리자는 서로다른 설정 옵션을 가지고 있따. iBatis 프레임워크는 <property>를 이용하기 때문에 트랜잭션이 필요로 하는 다양한 프로퍼티를 지정할 수 있다.

6. <dataSource>엘리먼트
자바에서 javax.sql.DataSource객체를 이용할때 connection Pool과 함께 주로 이용한다. <dataSource>엘리먼트는 데이터소스 팩토리로 부터 생성된 객체를 호출하여 사용하도록 하고 있으며, DataSourceFactory는 실제적인 데이터소스를 생성하는데 이용한다.
데이터소스 팩토리는 다음과 같이 iBatis에 구현되어 있으며 다음과 같은 종류가 있다.
- Simple : 단순한 데이터소스 팩토리로, 단일 커넥션 풀을 생성하고 있따. 이것은 iBatis 프레임워크에 포함되어 있으며, 이것은 JDBC드라이버를 필요로 한다.
- DBCP : DBCP 데이터소스 팩토리는 Jakarta Commons Data Connection Pool으 이용하여 생성되는 팩토리이다.
- JNDI : JNDI 데이터소스 팩토리는 iBatis에게 공유 컨테이너를 상요할 수 있도록 해준다. 이것은 JNDI를 통해서 접근이 가능하다.

7. <typeHandler> 엘리먼트
iBatis는 애플리케이션의 데이터타입과, JDBC데이터타입을 매핑하기 위해서 타입 핸들러를 이용한다.
그러므로 단순하게 애플리케이션 데이터를 JDBC타입으로 자동 변환하게 된다. 대부분의 상황에서 이러한 컴포넌트는 매우 단순하다. StringTypeHandler는 단순하게 getString메소드를 이용하여 String을 반환한다. 다른 상황에서 더욱 복잡한 타입으로 변경이 가능하다. 예를 들어 Boolean타입은 Y, N을 이용함으로 해서 True/False로 변환이 가능하게 된다.
새로운 타입 변환이 필요하게 된다면 타입 핸들러를 지정하여 애플리케이션과 JDBC데이터타입을 매핑시켜주면 된다. 대부분의 경우에 커스텀 타입핸들러를 이용할 필요는 없을것이다.

8. <sqlMap> 엘리먼트
마지막으로 SqlMapConfig.xml에서는 <sqlMap>엘리먼트를 설정하도록 하고 있다. 이것은 서로다른 2개의 설정이 필요할때 이용하게 된다. 이것 역시 JAR파일이나  WAR파일에 포함된 내용에 접근이 가능하게 되며, classpath를 루트로 해서 참조하면 된다.
보다 명확한 위치를 지정하여 사용하고자 할때에는 url속성을 이용할 수 있다. 이 속성은 java.net.URL클래스를 이용하여 접근할 수 있도록 해준다.

'DB > iBatis' 카테고리의 다른 글

iBatis 사용방법 정리  (1) 2008.12.15
IBATIS > Dynamic SQL  (1) 2008.11.07
The SqlMap API  (1) 2008.07.07
IBATIS 에서 LIKE 검색 기능 이용하기  (0) 2008.07.03
Websphere 6 + iBatis 연동 설정  (0) 2008.06.10