https://mybatis.org/mybatis-3/ko/sqlmap-xml.html
MyBatis의 Mapper XML은 SQL 쿼리를 작성하고, 데이터베이스 결과를 자바 객체로 매핑하는 중요한 역할을 한다. 처음 시작하는 사람이 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>
<mapper> 태그namespace: Mapper 인터페이스의 패키지 경로를 지정.<mapper namespace="com.example.mapper.UserMapper">
namespace는 XML이 특정 인터페이스와 연결되도록 설정해야한다.<select>, <insert>, <update>, <delete> 태그를 제공| 태그 | 역할 |
|---|---|
<select> | 데이터 조회 쿼리 실행 (SELECT). |
<insert> | 데이터 삽입 쿼리 실행 (INSERT). |
<update> | 데이터 업데이트 쿼리 실행 (UPDATE). |
<delete> | 데이터 삭제 쿼리 실행 (DELETE). |
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>
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 쿼리 결과를 자바 객체로 매핑한다.
resultType:<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>
graph TD
A[Mapper Interface 호출] --> B[Mapper XML의 id 식별자]
B --> C[SQL 실행]
C --> D[ResultSet 생성]
D --> E[자바 객체로 매핑]
E --> F[Mapper Interface 결과 반환]
id와 연결.resultType 또는 resultMap을 통해 자바 객체로 매핑.id는 Mapper 인터페이스 메서드 이름과 반드시 일치해야 한다.parameterType과 #{}를 통해 전달.resultType 또는 resultMap을 통해 객체로 매핑.| 개념 | 설명 |
|---|---|
| Mapper XML | SQL 쿼리를 정의하고 Mapper 인터페이스와 매핑. |
namespace | XML과 Mapper 인터페이스를 연결. |
id | SQL 쿼리의 고유 식별자로, 인터페이스 메서드 이름과 매핑. |
parameterType | SQL 실행 시 전달될 파라미터 타입. |
resultType | SQL 결과를 매핑할 자바 클래스. |
resultMap | 복잡한 결과 매핑 처리. |
#{} | 안전한 SQL 파라미터 바인딩. |

<mapper>, <select>, <insert> 등 기본 태그 익히기.#{}와 resultType을 활용한 단순 매핑 연습.id와 인터페이스 메서드 매핑.이 과정을 반복하며 SQL 작성 → Mapper XML 정의 → Mapper Interface 호출 → 결과 매핑의 전체 흐름을 이해하면 MyBatis의 Mapper XML을 쉽게 활용할 수 있다.