본문 바로가기

Java/[iBatis]

iBatis 설정

처음 IBATIS 로 작업을 하고 있습니다.

책을 처음부터 봐야겠지만 그렇게 할 시간적 여유(?)가 없는 관계로,

이동국님이 번역한 개발자 가이드 문서를 참고로 작업 하고 있습니다.

기본적인 SELECT , INSERT, UPDATE, DELETE 는 작업에 무리 없이 잘 진행이 되었습니다.


그런데, 하다보니 폼에서 SELECT 박스를 이용하여  쿼리를 생성하는 경우 (선택된값이 필드명이 되겠죠??)에
서 문제 되어 고생을 좀 했네요.. ^^;;

문서좀 제대로 읽어 볼걸.. ㅎㅎ ^^;;


<IBATIS 설정 테스트 >
1. iBatis 2.3.0.677 다운 로드 (http://ibatis.apache.org/)
  해당 jar 파일을 lib 폴더에 copy

2. servlet 으로  해당 업무 Action 단 작업
 
  dao 단에 해당 하는 부분은 구현할 피요가 없다.
   
3. sqlMapClient 작성  - java  class
  ex)
  private static SqlMapClient sqlMapper;

  /**
  * It's not a good idea to put code that can fail in a class initializer,
  * but for sake of argument, here's how you configure an SQL Map.
  */
  static {
    try {
      Reader reader = Resources.getResourceAsReader("com/dao/ibatis/SqlMapConfig.xml");
      sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
      reader.close();
    } catch (IOException e) {
      // Fail fast.
      throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
    }
  }

  /**
  * 로그 리스트
  * @param m
  * @return
  * @throws SQLException
  */
  public static List selectLogList (Map m) throws SQLException {
    return sqlMapper.queryForList("loglist", m);
  }

 

4. ibatis 용 xml 쿼리 생성
     <statement id="loglist"  .... >
       실행할 SQL 문 ( ex: SELECT * FROM DAUL)
     </statement>

5. sqlMapClient class 에서 xml 호출
 
  public static List selectLogList (Map m) throws SQLException {
    return sqlMapper.queryForList("loglist");

ibatis용 xml에서

받은 데이터를 그대로 출력 하는 경우  # 대신 ? 를 사용한다.


출력 샘플은 다음과 같다.

           WHERE LOG_UNIQUEID=UNIQUEID(+)
            <isNotNull prepend="AND" property="sc">
             $sc$ = #sv#
            </isNotNull>
            <isNotNull prepend="AND" property="sAction">
             LOG_ACTION = #sAction#
            </isNotNull>
            <isNotNull prepend="AND" property="sDate">
             TO_CHAR(LOG_DATE,'YYYYMMDD') BETWEEN #sDate# AND #eDate#
            </isNotNull>
             <isNotNull property="o1">
             ORDER BY $o1$ $o2$
            </isNotNull>


아... 해당 쿼리 테스트 에서
<dynamic prepend="where">
     LOG_UNIQUEID=UNIQUEID(+)
            <isNotNull prepend="AND" property="sc">
             $sc$ = #sv#
            </isNotNull>
            <isNotNull prepend="AND" property="sAction">
             LOG_ACTION = #sAction#
            </isNotNull>
            <isNotNull prepend="AND" property="sDate">
             TO_CHAR(LOG_DATE,'YYYYMMDD') BETWEEN #sDate# AND #eDate#
            </isNotNull>
             <isNotNull property="o1">
             ORDER BY $o1$ $o2$
            </isNotNull>

</dynamic>

위와 같이 테스트를 해봤는데, 오류가 발생해서, 바꿨는데,

혹시 해당 문법에 문제가 있는건지,, 아시는분 뎃글 부탁드려요.. ^^



현재까지 사용해본 바로는 ibatis를 이용하면 dao단의 작업을 현저히 줄일수 있다는 결론이다.

미리 사용해본 분들의 글을 보면 생산성 향상이라는 말을 많이 봤는데, 직접 겪어보니, 역시나 하는 마음이 든다.

역시 사람은 좀더 편한쪽으로 가야겠다는 생각이....

아직 사용해보지 못한 분들은 한번쯤 시간내서 사용해 보시라고 권하고 싶네요.. ^^