본문 바로가기
Mybatis/기본 매핑과 SQL 작성

파라미터 전달 방식 (단일값, Map, DTO)

by DEVLIB 2025. 4. 16.
728x90

1. 단일값 파라미터

사용 예

  • 기본 자료형: int, String, Long 등

XML 예시

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

Java 인터페이스

User selectUserById(int id);
  • #{id}: 파라미터명은 변수명과 같아야 함
  • 단일값은 자동으로 매핑됨

2. Map 방식 (다중 파라미터)

사용 예

  • 파라미터가 2개 이상일 때 간단하게 처리 가능
  • 동적 조건이나 다이나믹 쿼리에 유용

XML 예시

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

Java 인터페이스

User selectUser(Map<String, Object> paramMap);

호출 예시

Map<String, Object> param = new HashMap<>();
param.put("name", "단비");
param.put("email", "danbi@email.com");
userMapper.selectUser(param);

#{name} → Map의 키 이름과 일치해야 함


3. DTO/VO 객체 방식

사용 예

  • 파라미터가 많고 구조화되어 있을 때
  • User, Product와 같은 도메인 객체 전달

XML 예시

<insert id="insertUser" parameterType="User">
  INSERT INTO users (name, email)
  VALUES (#{name}, #{email})
</insert>

Java 인터페이스

void insertUser(User user);

User 클래스 예시

public class User {
  private String name;
  private String email;
  // getter/setter
}
  • #{name}, #{email} → user.getName(), user.getEmail() 자동 매핑

언제 어떤 방식 써야 하나?

상황 추천 방식
파라미터가 1개인 단순 쿼리 단일값
파라미터가 2~3개지만 VO 만들기 애매함 Map
도메인 단위로 CRUD가 필요함 DTO/VO 객체
파라미터 개수가 가변적 Map (or @Param 조합)

@Param 어노테이션

다중 파라미터를 객체 없이 넘기고 싶다면 @Param을 써서 이름 지정 가능해요:

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

마무리 요약

방식  특징 장점 단점
단일값 기본 타입 간단, 직관적 확장성 낮음
Map 유동적 구조 유연성 높음 타입 안전성 ↓
DTO 객체 기반 유지보수 좋음 객체 정의 필요
LIST