1. Mybatis란 무엇인가?


사실 JDBC라는 개념부터 알아야한다.

JDBC란 Java에서 DB와 연동하고 쓰기위해 사용하는 API이다.


JDBC는 DB 연동에 필수적으로 사용하는 것인데


이 JDBC만 사용해서 DB 쿼리문을 작성하면 java소스와 쿼리소스가 겹치게 되고 관리가 어려워진다.


Mybatis는 SQL 쿼리문을 xml 형식의 파일로 분리시켜 저장관리할 수 있고 java소스에서 xml 태그의 id만 호출하며 개발의 편리함을 제공한다.


Mybatis는 xml형식의 쿼리파일을 저장 및 호출하는 역할을 내부적으로 처리하는 것이다.



2. 왜 쓰고 있나?


Mybatis 없었을 때 소스 방식


1
2
3
4
5
6
7
8
9
10
11
12
13
public Entity selectFAQList(UserConnection conn, Entity param) throws SQLException {
    UserStatement stmt = null;
    ResultSet rslt = null;
    StringBuffer sql = new StringBuffer();
    sql.append("\n SELECT *");
    sql.append("\n FROM");
    sql.append("\n TABLE1");
    stmt = conn.prepareStatement(sql.toString());
    rslt = stmt.executeQuery();
    Entity _DATA = new Entity();
    _DATA.put("_DATA", EntityUtil.ResultSetToClobList(rslt));
    return _DATA;
}
cs


소스를 보면 .java 파일안에 StringBuffer라는 클래스를 호출해 sql이라는 객체를 만들어 문자를 계속 이어주면서 sql query를 작성하고 있다.


다 작성한 다음 작성 된 쿼리를 다른 메소드의 파라미터로 넘기고 리턴하고 있다.


이러한 방식은 쿼리가 수정될 때 마다 계속 .java에 들어가 .append() 메소드를 추가하고 저장해 유지보수가 힘들고 sql query구문의 분리가 어려지고 복잡해진다.


또한 쿼리 양이 많아질수록 .java에는 자바코드 뿐만아니라 쿼리코드로 인해 양이 방대해지는 문제가 발생한다.


아 이래선 도저히 안된다. 유지보수도 해야되고 추가개발도 해야되므로 sql구문과 java코드의 분리 필요성을 느끼게 된다.


Mybatis 적용 후 소스 방식


1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
  <ENTITY id="table.getTable1List" type="SQL" return="List">
    <![CDATA[
        SELECT *
            FROM
            TABLE1
    ]]>
    <PARAMS>    
    </PARAMS>
  </ENTITY>
cs


xml로 빼내서 쿼리문을 작성하면 내부적 처리는 Mybatis에서 모두 처리해주므로


Entity Id 값을 java에서 호출만하면 된다. 




+ Recent posts