본문 바로가기
카테고리 없음

Mybatis 파라미터 전달 방법 정리(parameterType, @Param)

by 기록하는 거부기 2025. 9. 16.

MyBatis로 SQL을 작성할 때 가장 기본이 되는 개념 중 하나가 파라미터(parameter) 전달 방식입니다.
파라미터를 어떻게 매핑하느냐에 따라 SQL 실행 결과가 달라질 수 있기 때문에, parameterType@Param을 올바르게 이해하는 것이 중요합니다.

이번 글에서는 MyBatis에서 파라미터를 전달하는 주요 방법을 정리하겠습니다.


1. MyBatis에서 파라미터 전달 개요

MyBatis에서 SQL에 값을 전달하는 방식은 크게 두 가지로 나눌 수 있습니다.

  1. parameterType을 XML 매퍼에서 선언하는 방법
  2. @Param 어노테이션을 통해 매개변수 이름을 지정하는 방법

두 방식 모두 장단점이 있으며, 상황에 따라 적절히 선택하는 것이 중요합니다.


2. parameterType 속성 활용 방법

매퍼 XML의 <select>, <insert>, <update>, <delete> 태그에서 parameterType 속성을 정의할 수 있습니다.
이때 전달할 객체의 타입을 지정하면, SQL에서 해당 객체의 필드를 사용할 수 있습니다.

 

예시:

<select id="selectUser" parameterType="User" resultType="User">
  SELECT id, name, email
  FROM users
  WHERE id = #{id}
</select>

 

자바 코드:

User user = sqlSession.selectOne("selectUser", new User(1));

👉 객체의 프로퍼티명이 XML에서 사용되는 #{id}와 매핑됩니다.


3. @Param 어노테이션 사용법

메서드에 여러 개의 파라미터를 전달할 경우, 기본적으로 MyBatis는 param1, param2와 같은 이름으로 자동 매핑합니다.
이 경우 가독성이 떨어질 수 있는데, @Param을 활용하면 명시적으로 이름을 지정할 수 있습니다.

 

예시:

@Select("SELECT * FROM users WHERE id = #{id} AND status = #{status}")
User selectUser(@Param("id") int id, @Param("status") String status);

👉 SQL 내에서 #{id}, #{status}와 같이 명확하게 사용할 수 있습니다.


4. 여러 개의 파라미터 처리 방식

여러 개의 파라미터를 전달하는 방법은 크게 3가지입니다.

 

1. Map 활용

Map<String, Object> params = new HashMap<>();
params.put("id", 1);
params.put("status", "ACTIVE");

sqlSession.selectOne("selectUser", params);

 

2. DTO/VO 객체 활용

UserSearchCondition condition = new UserSearchCondition(1, "ACTIVE");
sqlSession.selectList("selectUser", condition);

 

3. @Param 활용 (가장 직관적)

User selectUser(@Param("id") int id, @Param("status") String status);

 

👉 실무에서는 파라미터 개수와 성격에 따라 DTO 객체나 @Param 방식을 많이 사용합니다.


5. 실무에서 자주 쓰이는 예제

(1) 단일 파라미터 전달

<select id="getUserById" parameterType="int" resultType="User">
  SELECT * FROM users WHERE id = #{id}
</select>

 

(2) 다중 파라미터 전달(@Param 사용)

@Select("SELECT * FROM users WHERE id = #{id} AND email = #{email}")
User getUser(@Param("id") int id, @Param("email") String email);

 

(3) Map 활용 예시

<select id="getUserByMap" parameterType="map" resultType="User">
  SELECT * FROM users WHERE id = #{id} AND status = #{status}
</select>

✅ 마무리

MyBatis에서 파라미터를 전달하는 방법은 parameterType 속성, @Param 어노테이션, Map/DTO 객체 활용 등 다양합니다.

  • 단일 파라미터라면 parameterType만으로 충분
  • 다중 파라미터라면 @Param을 통한 명시적 매핑 추천
  • 복잡한 조건은 DTO/VO 객체 활용이 가장 안정적

상황에 따라 유연하게 선택하는 것이 SQL 관리와 유지보수에 큰 도움이 됩니다.