iBatis란 ?

  • SQL 구문의 실행 결과를 객체에 매핑하는 Data Mapper
  • 테이블 구조가 복잡해지고 정규화되어 있지 않더라도 사용이 가능
  • 기존에 사용하던 SQL을 그대로 사용하므로 배우기가 쉽다.

중요한 것은 xml 을 이용하여 sql문을 호출하여서 메모리 캐쉬에 가지고 있다가
결과값을 자바 객체에 맵핑 시켜주는 방법으로 jdbc 코딩시 매번 코딩해주었던
부분들을 모두 줄일수 있고 메모리 또한 효율적으로 관리 할 수 있다.
framework를 사용함으로서 시스템 또한 가벼워질수 있다.

***sql-map-config.xml
<sqlMapConfig>

  <properties resource="jdbc.properties" />

  <settings 
    cacheModelsEnabled="true" 
    enhancementEnabled="true"
    lazyLoadingEnabled="true" 
    maxRequests="32" 
    maxSessions="10"
    maxTransactions="5" 
    useStatementNamespaces="false" />
  
  <typeAlias alias="Account" type="kr.or.openframework.domain.Account"/>
  <typeAlias alias="Family" type="kr.or.openframework.domain.AccountFamily"/>

  <transactionManager type="JDBC">
    <dataSource type="DBCP">
      <property name="JDBC.Driver"
        value="${mysql.jdbc.driverClassName}" />
      <property name="JDBC.ConnectionURL"
        value="${mysql.jdbc.url}" />
      <property name="JDBC.Username"
        value="${mysql.jdbc.username}" />
      <property name="JDBC.Password"
        value="${mysql.jdbc.password}" />
      <property name="JDBC.DefaultAutoCommit" value="true" />
    </dataSource>
  </transactionManager>

  <sqlMap resource="kr/or/openframework/dao/ibatis/MySQLAccount.xml" />
</sqlMapConfig>


이 파일을 통하여 jdbc에 연결하고 sql에서 사용하는 각종 설정들을 셋팅해준다
설정들의 셋팅 정의는

슬라이드 1
Property Name
비고
enhancementEnabled
런타임시 바이트코드 향상을 가능하게 한다.
useStatementNamespace
sql 호출시 namespace 사용 여부
maxRequest
한꺼번에 SQL문을 수행할 수 있는 쓰레드의 수를 정의
maxSession
주어진 시간동안 활성화될 수 있는 세션의 수
maxTransaction
한꺼번에 SqlMapClient.startTransaction()에 들어갈 수 있는 쓰레드의 최대 갯수


***sql map 부분
<sql id="selectAccount_frag">
select
  acc_id,
  acc_first_name,
  acc_last_name,
  acc_email
from account
</sql>

<select id="selectAccountById" parameterClass="int" resultClass="Account">
<include refid="selectAccount_frag"/>
where acc_id = #id#
</select>

<insert id="insertAccount" parameterClass="Account">
insert into account (
  acc_id,
  acc_first_name,
  acc_last_name,
  acc_email
) values (
  #id#, #firstName#, #lastName#, #emailAddress#
)
</insert>

<update id="updateAccount" parameterClass="Account">
update account set
  acc_first_name = #firstName#,
  acc_last_name = #lastName#,
  acc_email = #emailAddress#
where acc_id = #id#
</update>

<delete id="deleteAccount" parameterClass="int">
delete from account 
where acc_id = #id#
</delete>


****자바소스

private static SqlMapClient sqlMapper;

static {
  try {
    // log4j setting
    Properties configProps = new Properties();
    ClassLoader classLoader = ClassLoader.getSystemClassLoader();
    InputStream inputStream = classLoader.getResourceAsStream("log4j.xml");
    configProps.load(inputStream);      
    PropertyConfigurator.configure(configProps);

    // iBATIS SQLMaps setting
    Reader reader = Resources.getResourceAsReader("kr/or/openframework/dao/ibatis/SqlMapConfig.xml");
    sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
    reader.close();
  } catch (IOException e) {
    throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
  }
}

public static Account selectAccountById(int id) throws SQLException {
  return (Account) sqlMapper.queryForObject("selectAccountById", id);
}
public static String insertAccount(Account account) throws SQLException {
  sqlMapper.insert("insertAccount", account);
  return "SUCCESS";
}
public static String updateAccount(Account account) throws SQLException {
  sqlMapper.update("updateAccount", account);
  return "SUCCESS";
}

public static String deleteAccount(int id) throws SQLException {
  sqlMapper.delete("deleteAccount", id);
  return "SUCCESS";
}


이렇게 xml파일로 sql문을 생성하고 맵핑 시킨 상태에서
자바소스로 메소드 호출 하듯이 xml tag를 호출시켜서 결과 값을 객체에
맵핑 시킨다 . 때문에 자바소스에서 sql문이 없어졌고 불필요한 부분이
삭제된 간결한 코드가 완성 되었다


이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by darkmirr | 2009/01/14 13:09 | FRAME WORK | 트랙백 | 덧글(2)

트랙백 주소 : http://darkmirr.egloos.com/tb/1265086
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by JOSH at 2009/01/14 13:26
그런데 정말 가벼워 질 수 있긴 한건가요... =_=;
중간 매핑되는 부분을 몇차례 거치다 보니
코딩하는 입장에서는 매핑 자동화 (와플 같은)가
없는 한 정말 기계적인 노가다가 늘어나는 거 같아요.

서비스 하나, SQL 하나 등록하는데도 뭐 이리 많은걸 고쳐야 하는지...
Commented by darkmirr at 2009/01/14 16:43
상대적인 이야기에서 가볍다는 이야기입니다.
자바 객체를 일일히 생성해서 접속하는 방식 보다는 가볍다는
상대적인 이야기 입니다.
프레임 워크는 모든지 설정을 통해서
조금만 가볍게 만들자는 의미에서
만들어지고 사용되게 되는거기 때문에
설정파일이 더더욱이 복잡해 지는건 사실입니다.
이러한 xml설정 파일에서 벗어나고 싶으면 루비를
공부해서 우리나라에 루비를 퍼트려야 겠지요 ㅎㅎㅎㅎ

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶