MyBatis의 Mapper XML 대 Annotation 기반 구성
MyBatis는 SQL 쿼리를 정의하고 매퍼 인터페이스의 메서드와 연결하는 두 가지 방법을 제공합니다.
- 매퍼 XML: 이 접근 방식에서 SQL 쿼리는 별도의 XML 파일에 정의됩니다. 매퍼 인터페이스는 XML 파일에서 해당 SQL 쿼리를 참조하는 메서드 서명만 포함합니다.
- 주석 기반 구성: 이 접근 방식에서 SQL 쿼리는 주석을 사용하여 매퍼 인터페이스 메서드 내에서 직접 정의됩니다. 이 접근 방식은 별도의 XML 파일에 대한 필요성을 제거합니다.
두 가지 접근 방식의 주요 차이점을 요약한 표는 다음과 같습니다.
특징매퍼 XML주석 기반 구성
정의 위치 | 별도의 XML 파일 | 매퍼 인터페이스 메서드 내부 |
유지 보수성 | 더 자세한 설명, 별도의 파일 관리가 필요함 | 더 간결하고 유지 관리하기 쉬운 코드 |
유연성 | 복잡한 쿼리를 더 쉽게 관리 | 복잡한 쿼리의 경우 가독성이 떨어질 수 있습니다. |
테스트 | XML 변경 사항을 다시 로드해야 합니다. | 테스트 중에 변경 사항이 즉시 반영되었습니다. |
IDE 통합 | 코드 완성을 위한 IDE 지원 감소 | 코드 완성을 위한 더 나은 IDE 지원 |
예제 1: 매퍼 XML
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.StudentMapper">
<select id="findAll" resultType="com.example.demo.entity.Student">
SELECT * FROM student;
</select>
</mapper>
예제 2: 주석 기반 구성
자바
package com.example.demo.mapper;
import com.example.demo.dto.StudentDto;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper // MyBatis mapper interface annotation
public interface StudentMapper {
@Select("SELECT * FROM student")
List<StudentDto> findAll(); // Method to find all students
// Other methods for findById, insert, update, and delete
}
매퍼 XML과 주석 기반 구성 중에서 선택
매퍼 XML과 주석 기반 구성 중에서 선택하는 것은 프로젝트의 특정 요구 사항과 선호도에 따라 달라집니다. 다음은 몇 가지 일반적인 지침입니다.
- 다음의 경우 매퍼 XML을 사용하세요:
- 읽고 유지 관리하기 쉬운 복잡한 SQL 쿼리가 별도의 파일에 있는 경우
- 매퍼 인터페이스에서 데이터 액세스 계층 로직을 비즈니스 로직과 분리하는 것이 좋습니다.
- 다음의 경우 주석 기반 구성을 사용하세요:
- 코드의 간결성을 중시하고 모든 MyBatis 구성을 매퍼 인터페이스 내에서 유지하는 것을 선호합니다.
- 주석에 대한 변경 사항이 즉시 반영되므로, 개발과 테스트의 용이성을 우선시합니다.
- 코드 완성 및 탐색을 위한 더 나은 IDE 지원의 이점을 누릴 수 있습니다.
궁극적으로 두 접근 방식 모두 동일한 결과를 효과적으로 달성할 수 있습니다. 가장 좋은 접근 방식은 팀의 선호도, 코딩 스타일 및 프로젝트 요구 사항에 따라 달라집니다.
'Spring( Framework )' 카테고리의 다른 글
이클립스 유용한 단축키 정리 (0) | 2025.01.22 |
---|---|
프로젝트 목표: 스프링 부트, MyBatis를 이용하여 학생 정보를 CRUD(Create, Read, Update, Delete) 할 수 있는 REST API를 구현합니다. (0) | 2025.01.17 |
스프링부트와 MyBatis를 이용한 CRUD 프로젝트 (0) | 2025.01.17 |
API, JPA, MyBatis: 언제 어떤 것을 사용해야 할까요? (2) | 2025.01.17 |
스프링 MVC를 이용한 API 개발: 주요 어노테이션 (0) | 2025.01.17 |