1. SQL 실행 자동화
- MyBatis는 **SQL Mapper(XML, 어노테이션)**에 정의된 쿼리를 자동으로 실행해줍니다.
→ 예를 들어 insertUser(User user)를 매퍼에 정의하면, sqlSession.insert("namespace.insertUser", user) 형태로 호출만 하면 SQL이 실행됩니다. - 즉, JDBC처럼 직접 PreparedStatement를 만들고 바인딩할 필요 없이, MyBatis가 자동으로 처리해 줍니다.

MyBatis 3에서의 자동 매핑 동작
1. parameterType 생략 가능
- parameterType은 메서드에 넘기는 파라미터 객체 타입을 명시하는 용도입니다.
- 사실 생략해도 동작합니다.
→ MyBatis는 실행 시점에 넘어온 객체의 타입을 보고 처리하기 때문이에요. - 예시:
<select id="getUser" resultType="User"> SELECT * FROM user WHERE id = #{id} </select>
→ 여기서 parameterType="int"를 안 써도 #{id}로 잘 동작합니다.
다만 명시해주면 가독성·유지보수성이 좋아서 실무에서는 자주 씁니다.
2. resultType / resultMap 자동 매핑
- resultType을 지정하면, 쿼리 결과의 컬럼명과 자바 객체의 필드명이 같으면 자동으로 매핑됩니다.
- 예시:
<select id="getUser" parameterType="int" resultType="User"> SELECT id, name, email FROM user WHERE id = #{id} </select>
➡ DB 컬럼이 id, name, email이고, User 클래스에 동일한 필드가 있으면 자동으로 매핑됩니다.
- 만약 DB 컬럼명이 user_id인데 객체 필드명이 id라면?
→ 자동 매핑이 안 되고, resultMap을 써야 합니다.
<resultMap id="userMap" type="User"> <id property="id" column="user_id"/> <result property="name" column="user_name"/> </resultMap>
➡ 그리고 resultMap="userMap"으로 지정.
3. 자동 매핑 단계 (MyBatis 내부 규칙)
- MyBatis 3는 **자동 매핑 수준(autoMappingBehavior)**을 설정할 수 있습니다.
- NONE: 자동 매핑 안 함
- PARTIAL: 기본값, 컬럼명과 프로퍼티명이 같으면 매핑
- FULL: 대소문자/언더스코어를 CamelCase까지 매핑 시도 (user_id → userId)
mybatis-config.xml 예시:
<settings> <setting name="autoMappingBehavior" value="FULL"/> </settings>
이렇게 하면 DB 컬럼이 user_id여도, Java의 userId에 자동으로 들어갑니다.
✅ 정리
- parameterType: 안 써도 되지만, 문서화 차원에서 쓰는 게 권장.
- resultType: 컬럼명 = 필드명이면 자동 매핑.
- resultMap: 컬럼명 ≠ 필드명이면 수동 매핑 필요.
- autoMappingBehavior를 FULL로 두면 CamelCase 변환까지 자동 매핑 지원
MyBatis 3에서 CamelCase 자동 매핑
MyBatis는 DB 컬럼명과 Java 객체 필드명이 다르더라도,
예를 들어
- DB: user_id
- Java: userId
이 경우도 자동 매핑이 가능합니다.
1. 설정 방법
mybatis-config.xml에서 다음 옵션을 켜주면 됩니다:
<settings> <!-- 컬럼명에 언더스코어(_) 있으면 CamelCase 프로퍼티로 자동 변환 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
이걸 설정하면:
- user_id → userId
- user_name → userName
- created_at → createdAt
처럼 자동 변환됩니다.
2. autoMappingBehavior
추가로 자동 매핑 동작 범위도 조정할 수 있습니다:
<settings> <setting name="autoMappingBehavior" value="FULL"/> </settings>
- NONE: 자동 매핑 안 함
- PARTIAL (기본): 단순히 이름이 같은 것만 매핑
- FULL: 이름이 같거나 camelCase 매핑까지 폭넓게 지원
FULL + mapUnderscoreToCamelCase=true 조합이면 웬만한 건 다 자동 매핑돼서 resultMap 안 써도 됩니다.
3. 결론
- CamelCase 자동 매핑 지원됨 → mapUnderscoreToCamelCase=true 필요.
- parameterType은 생략 가능, MyBatis가 실행 시점에 객체 타입을 추론.
- resultType은 꼭 지정해야 함, 다만 컬럼명 = 필드명(또는 CamelCase 규칙 적용)이면 자동 매핑.
LIST
'스프링 개발자 > DB' 카테고리의 다른 글
| 📌 MariaDB vs PostgreSQL vs Oracle – 실무 개발자를 위한 핵심 비교 정리 (0) | 2025.11.26 |
|---|---|
| mybatis 변천사(feat. iBATIS ) (1) | 2025.09.22 |
| 마이바티스의 장단점 (0) | 2025.09.21 |
| 데이터 모델링( 비즈니스 로직 tdd로 가기전) (2) | 2024.02.10 |
| 오라클, MySQL 그리고 MariaDB차이점 정리 (0) | 2024.02.04 |