Java2EE Framework/iBATIS 2.0

iBATIS 2.0 동작방법

본클라쓰 2010. 6. 12. 06:46

 iBATIS 2.0은 com.ibatis.sqlmap 패키지의 클래스를 활용하여 쿼리문과 결과를 쉽게 개발자에게 돌려준다. SQL Mps(com.ibatis.sqlmap.*)의 기본적인 생각은 간단함(simple)이다. 

 

 ibatis는 설정파일을 통해 PreparedStatement 파라미터와 ResultSets 으로 쉽게 매핑해 주며, 자바 코드 20%를 사용하여 JDBC 기능의 80%를 제공하는 간단한 프레임워크이다. 이 때, ibatis는 테이블 대 클래스, 다중 테이블 대 클래스, 다중 클래스 대 테이블 등과 같은 관계로부터 어떠한 제약도 가지지 않는다. 또한, 프레임워크가 너무 많은 의존성을 가진다면 이것은 애플리케이션이나 다른 프레임워크에 통합되기 힘들게 만든다. 2.0의 중요한 키포인트는 의존성관리와 제거의 중점을 두었다. 실제 의존적인 것은 jakarta-commons-logging 프레임워크뿐이다.

 

 ibatis는 설정파일을 통해 컨넥션과 수행할 쿼리문과 파라미터, 결과셋을 결정한다. 따라서 ibatis를 사용하기 위해 설정파일을 작성해야 한다. ibatis의 설정과 컨넥션, 영역에 따른 쿼리문을 저장하고 있는 설정파일의 위치를 지정하는 최상위 설정 파일의 형태는 다음과 같다.

 

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

 

<sqlMapConfig>

 

    <!-- 디비 설정 properties 파일의 위치 --> 

    <properties resource="sqlmap/SqlMapConfigExample.properties" />

 

    <!-- 옵션 세팅 -->
    <settings cacheModelsEnabled="true"

                  enhancementEnabled="true"

                  lazyLoadingEnabled="true"

                  maxRequests="32"

                  maxSessions="10"
                  maxTransactions="5"

                  useStatementNamespaces="false"/>

 

    <!-- 클래스 풀 네임을 숏네임으로 사용하기 위한 부분 -->
    <typeAlias alias="order" type="test.domain.Order" />

 

    <!-- 트랜잭션 메니저 -->
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="${driver}"/>
            <property name="JDBC.ConnectionURL" value="${url}"/>
            <property name="JDBC.Username" value="${username}"/>
            <property name="JDBC.Password" value="${password}"/>
        </dataSource>
    </transactionManager>
 
    <!-- 다른 SQL Map XML 파일 지정 -->
    <sqlMap resource="examples/sqlmap/maps/Person.xml/>
</sqlMapConfig>

 

 위와 같이 설정 파일을 작성하면 SqlMapClient 객체를 생성할 때 읽어 들일 설정 파일을 작성한 것이다. 이제 프로그램을 설정 파일과 쿼리문을 매핑시키는 방법이다. 

 

 만약, 사람(Person) 테이블에서 SELECT 하여 사람(Person)객체를 반환하는 코드를 JDBC와 iBatis를 사용한 방법으로 비교해 보겠다. 

 

 

1. JDBC

 

Connection conn = getConnection();   // 컨넥션을 얻는 방법은 일반적임으로 getConnection() 구현함수 생략

 

try {

    Strign sql = "SELECT * FROM person WHERE userId = ?";

    PreparedStatement pst = conn.prepareStatement(sql);
    pst.setInt(1, person.getUserId());
    ResuletSet rs = pst.executeQuery();

 

    if ( rs.next() ) {

       // Person 객체에 데이터 저장

    } 

    return person; 

} catch ( Exception e ) {

    e.printStackTrace();

} finally {

    // preparedStatement, ResultSet 객체 반환 처리 생략 

    if ( conn != null ) try { conn.close(); } catch (SQLException e ) {} 

 

2-0. ibatis 프로그램 코드

 

String resource = "example/sqlMap-config.xml";

reader = Resources.getResourceAsReader( resource );
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient( reader );

 

Integer personPk = new Integer(5);
Person person = (Person)sqlMap.queryForObject("getPerson", personPk);

 

2-1. 설정파일

 

<select id="getPerson" parameterClass="int" resultClass="examples.Person">
    SELECT
    PER_ID as id,
    PER_FIRST_NAME as firstName,
    PER_LAST_NAME as lastName,
    PER_BIRTH_DATE as birthDate,
    PER_WEIGHT_KG as weightInKilograms,
    PER_HEIGHT_M as heightInMeters
    FROM PERSON
    WHERE PER_ID = #value#
</select>

 

 위와 같이 태그는 어떤 작용을 하는지 설명하는 것이고 태그의 컨텐츠가 매핑시킬 쿼리문에 해당한다. 쿼리문을 만들고 해당 쿼리문을 수행한 결과를 resultClass 로 지정한 객체로 매핑하여 반환한다. ibatis는 이렇게 구현되어 있다.

 

 따라서 자바빈즈, Map, 원시래퍼타입(String, Integer 등) 그리고 SQL문을 위한 XML 문서를 매핑을 사용하는 매우 간단한 퍼시스턴스 영역의 프레임워크이다.

'Java2EE Framework > iBATIS 2.0' 카테고리의 다른 글

이클립스 iBatis DOCTYPE 에러 처리  (0) 2010.06.14
iBATIS 2.0 프레임워크 설명  (0) 2010.06.11