1. 마이바티스(mybatis)란?
"Java에서 DBMS에 엑세스하는 작업을 캡슐화하여 쉽게 사용할 수 있게 도와주는 Framework입니다."
마이바티스는 사용자 지정 SQL, 저장된 절차 및 고급 매핑을 지원하는 first class persistent 프레임워크입니다.
마이바티스는 JDBC 코드와 매개 변수의 수동 설정 및 결과 검색을 거의 모두 제거합니다.
마이바티스는 맵 프리미티브, 맵 인터페이스 및 Java Pojo (Plain Java Object) 를 위한 간단한 XML 또는 주석을 사용할 수 있습니다.
2. Mybatis 사용하는 이유? 왜 쓰고 있나? (mybatis의 장점)
1) 쿼리를 XML 로 분리 쿼리를 XML로 분리함으로써 아래와 같은 장점을 가질 수 있습니다.
- 쿼리 수정후 Java 파일을 다시 빌드할 필요 없다.
- Java에 직접 코드를 작성하는 것이 아니라 작성하기 쉽고 가독성이 좋다.
- 역할분리를 세분화 할 수 있다. (Java 로직 작성 담당자, 쿼리 작성 담당자)
2) SQL로 DB에 접근하다 보면 경우에 따라 SQL문이 변경이 필요한 경우가 있습니다.
MyBatis를 활용하면 단편적으로 제어문이나 반복 등의 처리가 가능하여 dynamic 쿼리를 작성할 수 있습니다.
(xml 안의 for, if 문을 작성하여 쿼리를 동적으로 사용가능) 예제코드를 볼까요?
<Mybatis 사용하지 않을때 작성 쿼리 ↓>
public Entity selectList(Connection conn, Entity param) throws SQLException
{
Statement stmt = null; StringBuffer sql = new StringBuffer();
sql.append("\n SELECT *");
sql.append("\n FROM");
sql.append("\n TBL");
stmt = conn.prepareStatement(sql.toString());
Entity rs = new Entity();rs.put("_DATA", EntityUtil.ResultSetToClobList(stmt.executeQuery()));
return rs;
}
소스를 보면 StringBuffer 클래스를 사용하고 문자열을 계속 append하면서 sql query를 작성합니다.
이러한 방식은 쿼리가 수정될 때 마다 계속 .java파일을 수정하여
.append() 메소드를 추가하고 저장해 빌드하여유지 유지보수가 힘들고 sql query구문의 분리가 어려워지고 복잡해지는 단점이 있습니다.
또한 쿼리가 길어질수록 자바파일에 자바코드 뿐만아니라 쿼리코드로 인해 양이 방대해지는 문제가 발생하여 유지보수가 어려워집니다.
<Mybatis 적용 후 소스 방식 ↓>
//Java 부분
session.selectList("selectList");
xml로 빼내서 쿼리문을 작성하면 내부적 처리는 Mybatis에서 모두 처리해주므로 Entity Id 값을 java에서 호출만하면 된다.
자세한 사용법은 조만간 포스팅하겠습니다~
3. mybatis의 단점
1) XML 파일을 따로 관리하여 소규모 프로젝트에서는 오히려 더 관리/수정이 어려울 수 있다.
2) XML 파일에 쿼리 외에 내용도 작성하여 생산성이 감소할 수 있다.
3) SQL을 직접 작성하여 반복되는 작업이 존재할 수 있습니다.
결론
대규모 프로젝트에서는 체계적으로 코드를 관리하기 위해서 사용하면 좋은 도구가 될 수 있지만,
소규모 프로젝트에서는 오히려 관리할게 많아져 복잡하고 오히려 생산성을 저하시킬 수 있습니다.
#mybatis, #orm,#framework,#프레임워크,#db,#디비,#마이바티스,java,#자바
댓글