스프링 개발자/DB

MyBatis 3에서는 SQL을 자동으로 실행해주는 기능

르무엘 2025. 9. 22. 19:45

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