https://mybatis.org/mybatis-3/ko/sqlmap-xml.html
MyBatis의 Mapper XML은 SQL 쿼리를 작성하고, 데이터베이스 결과를 자바 객체로 매핑하는 중요한 역할을 합니다. 처음 시작하는 사람이 Mapper XML을 이해하고 멘탈 모델을 형성하기 위해서는 구조, 기본 구성 요소, 매핑 원리, 그리고 실제 데이터 흐름을 명확히 파악해야 합니다.
1. Mapper XML의 주요 개념
1.1 Mapper란?
- Mapper XML:
- SQL 쿼리를 정의하고, 이를 자바의 Mapper 인터페이스 메서드와 매핑.
- Mapper 인터페이스:
- XML에 정의된 SQL을 호출하는 자바 메서드를 선언.
1.2 Mapper XML의 역할
- SQL 문장 관리:
- 자바 코드와 분리된 SQL 작성.
- 파라미터 전달:
- SQL 실행 시 필요한 데이터를 XML에 전달.
- 결과 매핑:
- SQL 결과를 자바 객체에 매핑.
2. Mapper XML의 구조
Mapper XML 파일은 SQL 쿼리와 매핑을 정의하는 파일로, 아래와 같은 구조를 갖습니다.
<?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.mapper.UserMapper">
<!-- SELECT 쿼리 -->
<select id="findUserById" parameterType="int" resultType="com.example.model.User">
SELECT id, name, email FROM users WHERE id = #{id}
</select>
<!-- INSERT 쿼리 -->
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
</mapper>
3. Mapper XML에서 알아야 할 구성 요소
3.1 <mapper> 태그
- 역할:
- XML 파일의 루트 요소로, Mapper 인터페이스와 매핑.
- 속성:
- namespace: Mapper 인터페이스의 패키지 경로를 지정.
<mapper namespace="com.example.mapper.UserMapper">
- XML은 Mapper 인터페이스를 보조하는 파일로, namespace는 XML이 특정 인터페이스와 연결되도록 설정합니다.
3.2 SQL 태그
- MyBatis는 SQL 작업을 위한 <select>, <insert>, <update>, <delete> 태그를 제공합니다.
태그 | 역할 |
<select> | 데이터 조회 쿼리 실행 (SELECT). |
<insert> | 데이터 삽입 쿼리 실행 (INSERT). |
<update> | 데이터 업데이트 쿼리 실행 (UPDATE). |
<delete> | 데이터 삭제 쿼리 실행 (DELETE). |
3.3 주요 속성
SQL 태그에서 자주 사용하는 속성은 다음과 같습니다.
속성 | 설명 |
id | 쿼리의 고유 식별자. Mapper 인터페이스 메서드와 연결. |
parameterType | SQL 실행에 사용되는 입력 데이터의 타입. |
resultType | SQL 실행 결과를 매핑할 자바 클래스. |
resultMap | 복잡한 매핑이 필요할 때 사용. |
<select id="findUserById" parameterType="int" resultType="com.example.model.User">
SELECT id, name, email FROM users WHERE id = #{id}
</select>
3.4 파라미터 바인딩
SQL 실행 시 입력 데이터를 MyBatis에서 처리할 수 있도록 바인딩합니다.
표현 | 설명 |
#{parameter} | 파라미터를 안전하게 바인딩. SQL 인젝션 방지. |
${parameter} | 파라미터를 SQL에 문자열로 직접 삽입. SQL 인젝션 위험 있음. |
<select id="findByName" parameterType="String" resultType="com.example.model.User">
SELECT id, name, email FROM users WHERE name = #{name}
</select>
- #{}는 SQL 쿼리에서 변수가 들어갈 자리(바인딩)를 지정합니다.
- 안전한 SQL 작성을 위해 항상 #{}를 사용하는 습관을 갖습니다.
3.5 결과 매핑
SQL 쿼리 결과를 자바 객체로 매핑합니다.
- resultType:
- SQL 결과의 컬럼과 자바 객체의 필드 이름이 같을 경우 자동 매핑.
<select id="findAllUsers" resultType="com.example.model.User">
SELECT id, name, email FROM users
</select>
- resultMap:
- 컬럼 이름과 필드 이름이 다르거나 복잡한 매핑이 필요한 경우 사용.
<resultMap id="UserResultMap" type="com.example.model.User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="user_email"/>
</resultMap>
<select id="findAllUsers" resultMap="UserResultMap">
SELECT user_id, user_name, user_email FROM users
</select>
4. Mapper XML의 데이터 흐름
4.1 MyBatis의 SQL 실행 흐름
- Mapper Interface 호출:
- 인터페이스 메서드가 XML의 id와 연결됩니다.
- SQL 실행:
- XML에 정의된 SQL이 실행됩니다.
- 결과 매핑:
- SQL 결과가 resultType 또는 resultMap을 통해 자바 객체로 매핑됩니다.
- 결과 반환:
- Mapper Interface 메서드로 최종 결과가 반환됩니다.
5. 핵심 포인트
- Mapper XML은 SQL을 자바와 연결하는 다리:
- XML 파일은 SQL 쿼리를 정의하고 Mapper 인터페이스와 연결하여 실행합니다.
- XML에서 정의된 id는 Mapper 인터페이스 메서드 이름과 반드시 일치해야 합니다.
- SQL 쿼리는 입력 파라미터와 출력 결과를 관리:
- 입력 데이터는 parameterType과 #{}를 통해 전달.
- 출력 결과는 resultType 또는 resultMap을 통해 객체로 매핑.
- MyBatis는 SQL 실행 흐름을 자동화:
- SQL 실행부터 결과 매핑까지의 과정을 내부적으로 처리하여 개발자가 SQL 작성과 매핑에만 집중할 수 있게 합니다.
6. 학습 시 중요 개념 요약
개념 | 설명 |
Mapper XML | SQL 쿼리를 정의하고 Mapper 인터페이스와 매핑. |
namespace | XML과 Mapper 인터페이스를 연결. |
id | SQL 쿼리의 고유 식별자로, 인터페이스 메서드 이름과 매핑. |
parameterType | SQL 실행 시 전달될 파라미터 타입. |
resultType | SQL 결과를 매핑할 자바 클래스. |
resultMap | 복잡한 결과 매핑 처리. |
#{} | 안전한 SQL 파라미터 바인딩. |
graph LR
A[Mapper Interface Method Call] --> B["Mapper XML (id)"]
B -->|SQL Execution| C[SqlSession]
C -->|Send Query| D[Database]
D -->|Result Set| C
C -->|Mapping Results| E[Java Object]
E -->|Return| A
7. 학습 단계
- Mapper XML의 구조 이해:
- <mapper>, <select>, <insert> 등 기본 태그 익히기.
- 파라미터와 결과 매핑 연습:
- #{}와 resultType을 활용한 단순 매핑 연습.
- Mapper 인터페이스 연결:
- XML 파일의 id와 인터페이스 메서드 매핑.
- 데이터 흐름 이해:
- SQL 실행부터 자바 객체 매핑까지의 과정을 코드로 따라가며 학습.
이 과정을 반복하며 SQL 작성 → Mapper XML 정의 → Mapper Interface 호출 → 결과 매핑의 전체 흐름을 이해하면 MyBatis의 Mapper XML을 쉽게 활용할 수 있습니다.
'Spring' 카테고리의 다른 글
Spring Boot - Spring Web (0) | 2024.12.18 |
---|---|
MyBatis - SqlSession (0) | 2024.12.16 |
MyBatis 개요 (0) | 2024.12.15 |
RowMapper와 BeanPropertyRowMapper (1) | 2024.12.15 |
JDBC API - JDBC Template (1) | 2024.12.14 |