54.iBATIS, MyBatis/iBatis2009. 1. 14. 14:57
반응형
1. 우선 iBATIS 를 다운받습니다.

2. 다운을 풀고, /lib 폴더에 ibatis-2.3.4.726 를 톰캣의 lib폴더나 프로젝트의 web-inf/lib 폴더에 넣습니다.
- /현제프로젝트/WebContent/WEB-INF/lib/
- /톰캣/lib/   (톰캣6버전)

두폴더중 편한곳에다가 jar파일을 저장합니다.


3. example 폴더를 타고 들어가보면 sqlMapConfi.xml 파일이 있습니다. 이파일을 복사해서 붙여넣기 하셔도되고
src폴더에서 새로 xml 파일을 만드셔도 됩니다.

sqlMapClient.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>

  <!-- Configure a built-in transaction manager.  If you're using an
       app server, you probably want to use its transaction manager
       and a managed datasource -->
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.10.103:1521:db"/>
      <property name="JDBC.Username" value="ahm"/>
      <property name="JDBC.Password" value="ahm"/>
    </dataSource>
  </transactionManager>

  <!-- List the SQL Map XML files. They can be loaded from the
       classpath, as they are here (com.domain.data...) -->
  <sqlMap resource="db/Account.xml"/>
  <!-- List more here...
  <sqlMap resource="com/mydomain/data/Order.xml"/>
  <sqlMap resource="com/mydomain/data/Documents.xml"/>
  -->

</sqlMapConfig>

빨간부분으로 표시된부분이 제가 수정한 부분입니다. db정보는 propertie로 빼서 관리하는방법도 있으나,
우선은 이렇게 하도록 하겠습니다.

4. 자바빈즈를 생성합니다.

db라는 패키지를 만들고 그 밑에 Acount.java 파일을 생성합니다. 결과를 담아올 빈즈입니다.
Account.java

package
 db;

public class Account {
 private int id;

  public int getId() {
   return id;
 }

  public void setId(int id) {
   this.id = id;
 }
}

5. XML을 생성합니다.

우리가 사용할 쿼리를 작성하는 XML입니다.
Account.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Account">
  <!-- Select with no parameters using the result map for Account class. -->
  <select id="getAcount" resultClass="db.Acount">  다음값을 이용하여 쿼리와 맵핑합니다.
    select id from ACCOUNT where name=#value#
  </select>
</sqlMap>

6. 이제 쿼리를 실행할 JAVA를 작성한다.

SimpleExample.java

package db;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;

import java.io.Reader;
import java.io.IOException;
import java.sql.SQLException;

public class SimpleExample {

  private static SqlMapClient sqlMapper;

  static {
   try {
     Reader reader = Resources.getResourceAsReader("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);
   }
 }

  public static Account getAcount() throws SQLException {
   return (Account)sqlMapper.queryForObject("getAcount","ahm");
   // 이부분에서 쿼리를 실행한다. queryForObject는 한개의 데이터를 가져올떄 사용하는 메소드이다.
 }
 
 public static void main(String[] args){
   
   try {
   Account temp = getAcount();    
   System.out.println(temp.getId());
 } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
 }
 }
}

물론 이 java파일을 실행하기 전에는 DB에 TABLE과 데이터가 준비되어있어야겠다.

현제 이클립스내에 폴더구조이다.


이미지와 같이 , iBATIS 를 설정하는 설정파일인 sqlMapConfig.xml 파일과
               실제 SQL이 담겨져 있는 Account.xml 파일
               결과를 담아올 객체인   Account.java 파일
               이러한 과정을 호출하는 SimpleExample.java 파일
               그리고 WEB-INF/lib 에 ibatis-**.jar 파일 등을 해당폴더에 넣고 위에 순서대로 따라한다면
               DB에서 요청사항을 무난히 가져올수 있을것이다.

다음엔 좀더 세부적인 설정사항이라던지 자세한 정보를 보여드리겠습니다.
Posted by 바보기자



가장 간단히 설명하면, JAVA에서 DB관련 작업을 편하게 해주는 프레임웍정도라고 할까?

iBATIS in action에서 iBATIS는 "SQL 실행 결과를 자바빈즈 혹은 Map 객체에 매핑해주는 퍼시스턴스 솔루션으로 SQL을 소스 코드가 아닌 XML로 따로 분리해 관리하여 지겨운 SQL 문자열 더하기에서 해방시켜 줍니다. 또한 XML에서 동적 SQL 요소를 사용하여 쿼리 문장을 프로그래밍 코딩 없이 자유롭게 변환할 수 있게 해줍니다. 이러한 접근방식으로 인해 iBATIS를 사용하면 JDBC를 사용할 때보다 약 60% 정도의 코드만으로 프로그램 작성이 가능하다" 라고 한다.

말로만 하면 뭔소리인지 모르겠으니 간단한 예제 정도를 들어보자.

- 일반적인 JDBC 예제
import javax.naming.*;
import javax.sql.*;
import java.sql.*;

public class Employee {
 public Account getAccount(int id) throws SQLException, NamingException{
   Account account = null;
   
   String sql = "select * from employee where id= ?";
   
   Connection conn      = null;
   PreparedStatement ps = null;
   ResultSet rs       = null;
   
   try {      
     Context ctx = new InitialContext();
     DataSource ds =
             (DataSource)ctx.lookup(
                "java:comp/env/jdbc/TestDB");
     conn = ds.getConnection();
     ps = conn.prepareStatement(sql);
     ps.setInt(1, id);
     rs = ps.executeQuery();
     
     while( rs.next()){
       account = new Account();
       account.setId(rs.getInt("ID"));        
     }
   } finally {
     try {
       if ( rs != null ) rs.close();
     } finally {
       try {
         if (ps != null) ps.close();
       } finally {
         if (conn != null) ps.close();
       }
     }
   }
   return account;  
 }
}   

뭐다들 아시겠지만 간단히 쿼리를 날려서 Acount 객체에 담아가지고 오는 소스이다. 대충봐도 무척이나 길다,
이걸 iBATIS를 이용해서 처리하는 예를 보자,

- iBATIS 를 이용한 예
acount.xml
<select id="getAcount" resultClass="Acount" parameterClass="java.lang.Integer">

   select * from employee where id= #id#
</select>

java
Acount act = (Acount) sqlMap.queryForObject("getAcount",new Integer(5));
 
보면 알겠지만 상단에 쿼리를 닮고있는 xml과 아래 간단히 크 쿼리를 실행시키는 java 한줄정도?이다.
사실 iBATIS를 설정하는 config파일과 sqlMap객체를 불러오는 부분이 있긴하지만, 무척이나 좋아보이도록,
이것만 쓰겠다. -_-;;

iBATIS 의 목표와 특징은 몇마디로 짧게정의하다면,

쉽고, 간단하고, 의존성이 적은 프레임웍이라는 것이다.
sql문과 java코드와의 분리만으로도 java개발자는 쿼리문을 신경쓰지 않아도 된다. sql문이 변경되더라도,
파라미터 값만 변경되지 않는다면, java소스에서는 수정할 부분이 없다.

~ 이론적인 면은 대충 접어두고 실전으로 넘어가자(사실 나도잘몰라서;;ㅈㅅ)

다음 포스트는 실제로 이클립스에서 오라클 디비와 연동하겠습니다.

beans.tistory.com

2008/11/13 - [W_@Second_Position/ω FrameWork_iBATIS] - iBATIS환경을 이해할 수 있도록 흐름도를 한번 그려 보자!

Posted by 바보기자

출처 : http://webprogrammer.tistory.com/595

iBATIS환경을 이해할 수 있도록 흐름도를 한번 그려 보자!

이미지를 클릭하면 원본을 보실 수 있습니다.


위의 그림에서 알 수 있듯이 sqlMapConfig.xml문서가 바로 환경 설정 파일임을 알 수 있을 것이다.

이것은 load시 한번만 인식 되는데 그 부분이 바로 앞의 모든 예제들에서 클라이언트 부분에 다음과 같은 코드가 된다.


      Reader reader = Resources.getResourceAsReader("ex2/sqlMapConfig.xml");


이때 transationManager요소와 sqlMap요소들을 인식하여  RDBMS와 SQL문을 관리하는 xml문서들이 인식된다.그리고


     SqlMapClient sqlMapper = SqlmapClientBuilder.buildSqlmapClient(reader);


문장으로 인해 인식된 SQL문들을 관리하는 xml요소들이 모두 sqlMapper로 하나의 객체에 id가 키값이 되어 Map구조로

담겨져 관리된다. qureryForList()와 같은 메서드를 통하여 지정된 id를 사용하면 테이블에 있는 자원들을 Emp.xml에 정의된

resultMap이나 지정된 객체로 쉽게 받는다.


특징
iBATIS Hibernate JPA
간단함
가장 좋음
좋음 좋음
완벽한 객체 관계 매핑 평균 가장 좋음 가장 좋음
데이터 모델 변경시 융통성 좋음 평균 평균
복잡성
가장 좋음 평균 평균
SQL에 대한 의존성 좋음 평균 평균
성능 가장 좋음 가장 좋음 N/A *
다른 관계 데이터베이스에 대한 이식성 평균 가장 좋음 N/A *
자바가 아닌 다른 플랫폼에 대한 이식성 가장 좋음 좋음 지원하지 않음
커뮤니티 지원과 문서화 평균 좋음 좋음
<표:http://blog.openframework.or.kr/50에서 펌>
Posted by 1010