반응형
MyBatis DAO 인터페이스에서 @Param을 사용하는 경우와 그렇지 않은 경우가 있어서 차이점을 정리한다.
결론 : 파라미터가 2개 이상일 때 @Param이 필요하다.
이유
MyBatis는 파라미터가 1개인 경우 XML mapper에서 어떤 이름으로든 참조할 수 있다.
하지만 파라미터가 2개 이상이면 어떤 값이 어떤 이름에 해당하는지 알 수 없다.
@Param을 붙이지 않으면 MyBatis가 내부적으로 param1, param2, ... 로 처리하기 때문에,
XML에서 #{aaaa}, #{bbbb} 같은 이름으로 참조하면 런타임 오류가 발생한다.
예시
// 파라미터 1개 → @Param 불필요
List<Card> getCardList(Card card);
// 파라미터 2개 → @Param 필수
List<Card> getCardByCondition(
@Param("aaaaa") List<Integer> list,
@Param("bbbb") List<String> list2
);
주의
@Param에 지정한 이름과 XML mapper의 #{이름}이 반드시 일치해야 한다.
파라미터가 2개 이상인 메서드에서 @Param을 제거하면 XML 매핑 실패로 런타임 오류가 난다.
728x90
반응형