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);
- 참고 블로그 : https://popo015.tistory.com/99
[Spring] @param 사용이유
public void countQuery(@Param("name")String parameter); 이렇게 @Param 어노테이션을 붙이면 본인이 원하는 명으로 mapper에서 사용할 수 있다. 위와 같은 경우는 #{name}이 되겠다. 사실 위의 코드같은경운 파라미
popo015.tistory.com
'Programming > etc.' 카테고리의 다른 글
[SLQ/윈도우 함수] SELECT 조회 시 결과 집합의 총 ROW 수를 구하려면? (0) | 2023.11.14 |
---|---|
[JAVA] if 조건문 작성 시 마지막 조건을 else if {...}로 마무리 해도 될까? (0) | 2023.08.22 |
푸티(Putty) 기초적인 사용 기록 (0) | 2023.07.13 |
JBWEB000236 : Servlet.service() for servlet jsp threw exception : java.lang.NumberFormatException : For input string : "변수명" 관련에러 (0) | 2023.07.12 |
[ibatis] Parsing error was found in mapping (0) | 2022.12.26 |