본문 바로가기

프로그래밍/이것저것 일하면서

@Param 어노테이션, MyBatis와 Spring Data 헷갈리지 말자

반응형

org.springframework.data.repository.query.Param와 org.apache.ibatis.annotations.Param 어노테이션은 서로 다른 패키지에 있으며 다른 용도로 사용됩니다.

org.springframework.data.repository.query.Param 어노테이션은 스프링 프레임워크에서 제공하는 Spring Data JPA와 같은 ORM(Object Relational Mapping) 프레임워크에서 사용됩니다. 이 어노테이션은 메소드의 파라미터 이름과 쿼리 매개 변수 이름을 매핑하기 위해 사용됩니다.

예를 들어, 다음과 같은 메소드가 있다고 가정해보겠습니다.

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.username = :name")
    User findByUsername(@Param("name") String username);
}

위의 코드에서 @Param 어노테이션은 name 매개 변수의 이름을 지정합니다. 이 이름은 JPQL 쿼리의 :name 매개 변수와 매핑됩니다. 이 어노테이션을 사용하여 매개 변수 이름을 지정하지 않으면 Spring Data JPA는 매개 변수의 순서를 기반으로 쿼리 매개 변수를 매핑합니다.

반면에, org.apache.ibatis.annotations.Param 어노테이션은 MyBatis와 같은 SQL 매퍼 프레임워크에서 사용됩니다. 이 어노테이션은 SQL 매개 변수 이름과 매핑됩니다.

예를 들어, 다음과 같은 메소드가 있다고 가정해보겠습니다.

public interface UserMapper {
    @Select("SELECT * FROM users WHERE username = #{name}")
    User findByUsername(@Param("name") String username);
}

위의 코드에서 @Param 어노테이션은 name 매개 변수의 이름을 지정합니다. 이 이름은 SQL 쿼리의 #{name} 매개 변수와 매핑됩니다. 이 어노테이션을 사용하여 매개 변수 이름을 지정하지 않으면 MyBatis는 매개 변수의 순서를 기반으로 쿼리 매개 변수를 매핑합니다.

따라서, 두 어노테이션은 서로 다른 용도로 사용되며, 프레임워크에 따라 다른 패키지에서 제공됩니다.

결론

IDE에서 import 할 때 잘 보고 선택해야 합니다. 이렇게 import를 잘못한 경우에는 런타임 단계에서만 오류를 발견할 수 있기 때문입니다.

반응형

개발자가 그리는 인스타툰 팔로우하세요!