본문 바로가기

웹개발

[MyBatis/iBATIS] IBATIS기초 - IBATIS란?

가장 간단히 설명하면, 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소스에서는 수정할 부분이 없다.

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

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