MyBatis란?

김현정·2025년 4월 30일
0

MyBatis

MyBatis는 RowMapper가 가지고 있는 단점인 "반복되는 코드"를 줄이고 "함께있는 프로그램 코드와 쿼리 코드를 분리하여 관리"하고 싶은 니즈를 반영하여 탄생하였다.

MyBatis 특징

  1. JDBC로 처리하는 코드의 설정(Connection) 부분을 줄이고 실제 SQL문에 연결함으로서 빠른 개발이 가능하게 한다. (SQL Mapper 특징)
  2. MyBatis 코드는 map 인터페이스(또는 클래스)와 SQL 쿼리와 ResultSet 매핑을 위한 xml 및 annotation을 사용한다.
  3. 다른 방식에 비해 객체자체보다 쿼리에 집중할 수 있다.
특징설명
SQL 직접 작성JPA는 SQL을 자동 생성하지만, MyBatis는 개발자가 직접 SQL을 작성함
유연한 제어복잡한 쿼리 작성, 조건 분기, SQL 튜닝 등에 유리
XML 또는 Annotation 방식 지원SQL을 XML 파일 또는 Java 어노테이션으로 관리 가능
자동 매핑쿼리 결과를 Java 객체로 자동 매핑 (DTO, VO 등)
비표준 ORM완전한 ORM은 아님 (객체 간 관계 자동 매핑은 안 함)

MyBatis 한계점

  1. 결국 SQL을 직접 작성하는 것은 피곤하다. (DB 기능에 종속적)
  2. 테이블마다 비슷한 CRUD 반복, DB 타입 및 테이블에 종속적이다.

작동 구조 예시

  1. Mapper 인터페이스
public interface UserMapper {
    User findById(Long id);
}
  1. Mapper XML
<mapper namespace="com.example.mapper.UserMapper">
    <select id="findById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>
  1. 사용
User user = userMapper.findById(1L);

MyBatis vs JPA 비교

항목MyBatisJPA
SQL 작성직접 작성자동 생성 (JPQL/Hibernate)
제어력높음낮음 (자동화 중심)
생산성낮음 (SQL 수작업)높음 (자동화 많음)
학습 곡선낮음비교적 높음
대규모 프로젝트복잡한 쿼리나 성능 튜닝이 필요한 경우 적합도메인 중심 설계(DDD)에 적합

언제 MyBatis를 사용?

  • 복잡한 SQL을 직접 제어하고 싶을 때

  • 데이터 중심의 시스템에서 성능 튜닝이 중요할 때

  • 기존 레거시 시스템이 SQL 기반일 때

  • JPA의 N+1 문제 등 자동화가 부담될 때

build.gradle 의존성

	// MyBatis Starter
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'

    // MySQL JDBC 드라이버
    runtimeOnly 'com.mysql:mysql-connector-j:8.0.33'

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Seoul
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/**/*.xml
  type-aliases-package: com.example.domain
  configuration:
    map-underscore-to-camel-case: true

0개의 댓글