00 개요
- 회사에서 코드분석 시 쿼리문들이 담겨있는 .xml 파일들에서 mybatis를 사용하는데 (<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">) 이에 대한 정리
01 MyBatis란
1. 정의
- Java 기반의 데이터베이스 연동 프레임워크
- 오픈 소스 ORM(Object-Relational Mapping) 프레임워크
- SQL 쿼리를 직접 작성하여 데이터베이스와의 상호작용을 효율적으로 처리할 수 있도록 도와주는 라이브러리
- SQL Mapper, 즉 데이터베이스와 객체 간의 자동 매핑(ORM, Object Relational Mapping)을 지원하는 도구
- 기존 JDBC를 통해 RDBMS에 액세스하는 작업을 캡슐화하고 기존 JDBC의 중복작업 간소화
1) 동작 원리
- XML 파일의 형태인 Mapper를 통해 프로그램 코드로부터 SQL 쿼리가 분리되는 환경을 제공하고 Java 객체와 매핑하는 작업을 도와줌
2) JDBC와의 비교
- 기존 JDBC보다 사용하기 편리
- JDBC의 모든 기능을 Mybatis가 대부분 제공
- 수동적인 파라미터 설정과 쿼리 결과에 대한 맵핑 구문을 제거 가능
- 기존 JDBC를 이용하여 프로그래밍을 하는 방식은 프로그램 소스안에 SQL문을 작성하는 방식으로 생산성이 좋지 않음
- JDBC는 세부적인 작업이 가능하게 작업별로 각각의 메소드를 호출하게 됨, 이러한 사항들은 다수의 메소드를 호출하고 관련된 객체를 해제해야하는 단점이 있음
- JDBC 예제 코드:
- 아래 예제 코드처럼 Connection을 맺고, SELECT 명령을 전달+실행해서 ResultSet 객체에 저장 후, rs.next()을 이용하여 ResultSet 처리행을 하나씩 이동시켜 받아오는 구조로 복잡함
//STUDENT 테이블의 학생정보를 출력하는 JDBC 프로그램
public class SelectStudentApp {
public static void main(String[] args) {
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//
String url="jdbc:oracle:thin:@localhost:1521:xe";
String user="scott";
String password="tiger";
//
con=DriverManager.getConnection(url, user, password);
//
stmt=con.createStatement();
//
String sql="select * from student order by no";
//
rs=stmt.executeQuery(sql);
//
if(rs.next()) {
do {
int no=rs.getInt("no");
String name=rs.getString("name");
String phone=rs.getString("phone");
String address=rs.getString("address");
String birthday=rs.getString("birthday");
//
System.out.println("학번 = "+no);
System.out.println("이름 = "+name);
System.out.println("전화번호 = "+phone);
System.out.println("주소 = "+address);
System.out.println("생년월일 = "+birthday.substring(0, 10));
} while(rs.next());
} else {
System.out.println("검색된 학생정보가 없습니다.");
}
} catch (ClassNotFoundException e) {
System.out.println("[에러] OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러] JDBC 오류 = "+e.getMessage());
} finally {
try {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {}
}
}
}
3. 특징
- SQL문과 프로그래밍 코드의 분리
- SQL문 직접 사용: Hibernate와 같은 다른 ORM 프레임워크는 자동으로 SQL 쿼리를 생성해 주지만, MyBatis는 사용자가 직접 SQL을 작성하고 제어할 수 있어, 복잡한 쿼리를 다루는 데 좋음
- 동적 SQL 지원: XML 또는 애노테이션을 통해 동적 SQL 구성 가능. 조건에 따라 쿼리가 달라질 경우 매우 유용
- SQL에 변경이 있을 때마다 자바 코드를 수정하거나 컴파일하지 않아도 됨
- SQL을 별도의 파일로 분리해서 관리함
- 자동 매핑: 객체 프로퍼티로 파라미터와 결과 (SQL 실행 후 결과)를 객체(DTO, Map 등)로 자동 매핑 지원
- 간단한 설정: Spring 연동 모듈을 제공해주기 때문에 Spring 설정이 간단함
- 유연성: 다양한 데이터베이스와 함께 사용 가능, 트랜잭션 관리 등과도 잘 통합됨; 다양한 프로그래밍 언어로 구현 가능 (Java, C#, .NET, Ruby)
MyBatis는 SQL에 대한 강력한 제어가 필요한 프로젝트에서 많이 사용되며, 복잡한 비즈니스 로직과 SQL 쿼리를 쉽게 관리할 수 있는 장점이 있습니다.
참조
'JAVA' 카테고리의 다른 글
extends vs implements (자바 키워드, 파이썬과 비교) (0) | 2024.09.30 |
---|---|
throws (자바 키워드) (0) | 2024.09.30 |
ArrayList vs LinkedList (자바 데이터 타입) (0) | 2024.09.30 |
로그 레벨 (log4j) (0) | 2024.05.07 |