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 파라미터 바인딩. |
7. 학습 단계
- Mapper XML의 구조 이해:
- <mapper>, <select>, <insert> 등 기본 태그 익히기.
- 파라미터와 결과 매핑 연습:
- #{}와 resultType을 활용한 단순 매핑 연습.
- Mapper 인터페이스 연결:
- XML 파일의 id와 인터페이스 메서드 매핑.
- 데이터 흐름 이해:
- SQL 실행부터 자바 객체 매핑까지의 과정을 코드로 따라가며 학습.
이 과정을 반복하며 SQL 작성 → Mapper XML 정의 → Mapper Interface 호출 → 결과 매핑의 전체 흐름을 이해하면 MyBatis의 Mapper XML을 쉽게 활용할 수 있습니다.
'Backend > Spring' 카테고리의 다른 글
| @Controller와 @RestController의 차이점 (1) | 2024.11.21 |
|---|---|
| Spring Web (0) | 2024.11.20 |
| MyBatis : SqlSession (0) | 2024.11.19 |
| MyBatis (0) | 2024.11.19 |
| RowMapper & BeanPropertyRowMapper (0) | 2024.11.19 |