Q.

스프링에서 서비스에서 쿼리에 보낼 변수를 임의 지정후 매퍼를 호출할때 @param을 붙여야 하는 이유가 뭘까?  왜 @param을 붙이지 않으면 변수를 못찾는 걸까? 

 

 

 

A.


  • 스프링에서 서비스에서 쿼리에 보낼 변수를 임의로 지정하고 매퍼를 호출할 때, @Param 어노테이션을 사용하는 이유는 MyBatis와 관련이 있다.
  • MyBatis는 SQL 쿼리를 실행할 때, 매개변수를 명시적으로 지정하지 않으면 자동으로 매핑을 수행한다.
  • 그래서 메서드의 매개변수가 하나일 때는 @Param 어노테이션을 사용하지 않아도 MyBatis가 매개변수를 찾아 매핑할 수 있습니다.
  • 하지만 메서드의 매개변수가 여러 개일 경우에는 MyBatis가 어떤 매개변수를 사용하여 SQL 쿼리의 파라미터로 매핑해야 하는지 알 수 없다.
  • 따라서 @Param 어노테이션을 사용하여 명시적으로 어떤 매개변수를 어떤 파라미터에 매핑해야 하는지 알려주는 것이 필요한 것이다.

 

 


 

 

 

  • 예를 들어, 다음과 같은 메서드 시그니처가 있다고 가정해본다.
public void updateData(String name, int age);

 

 

  • 이 경우에는 다음과 같이 MyBatis XML에서 쿼리를 작성할 수 있다.
<update id="updateData" parameterType="map">
    UPDATE your_table
    SET name = #{name},
        age = #{age}
</update>

 

 

 

  • 하지만 이때, MyBatis는 어떤 매개변수를 name에, 어떤 매개변수를 age에 매핑해야 하는지 알 수 없다.
  • 이런 경우에 @Param 어노테이션을 사용하여 메서드의 각 매개변수에 명시적으로 이름을 부여하여 사용한다.
public void updateData(@Param("name") String name, @Param("age") int age);

 

 

 

 

 

 

 

 

 

 

[Spring] @param 사용이유

public void countQuery(@Param("name")String parameter); 이렇게 @Param 어노테이션을 붙이면 본인이 원하는 명으로 mapper에서 사용할 수 있다. 위와 같은 경우는 #{name}이 되겠다. 사실 위의 코드같은경운 파라미

popo015.tistory.com

 

 

 

 

 

 

+ Recent posts