Spring

스프링 - Mybatis 파라미터 전달 (@Param)

마루설아 2025. 6. 17. 22:02

아래 코드를 참조해보자.

 

Mapper.java

public List<ReplyVO> getListWithPaging(
        @Param("cri") Criteria cri,
        @Param("bno") Long bno
);

 

Mapper.xml

<select id="getListWithPaging" resultType="org.zerock.domain.ReplyVO">
    SELECT RNO, BNO, REPLY, REPLYER, REPLYDATE, UPDATEDATE
    FROM TBL_REPLY
    WHERE BNO = #{bno}
    ORDER BY RNO ASC
</select>

 

MapperTests.java

@Test
public void tesetList() {
    Criteria cri = new Criteria();

    List<ReplyVO> replies = mapper.getListWithPaging(cri, bnoArr[0]);

    replies.forEach(reply -> log.info(reply));
}

 

여기서 눈여겨볼 점은 Mapper.java에서 @Param의 역할이다.

일반적으로 Mapper에서 XML로 하나의 파라미터를 전달할 때는 @Param 없이 매개변수로만 전달이 가능하다.

 

그러나 다수 파라미터의 경우, Mybatis는 어떤 이름으로 XML에서 참조해야할지 알지 못한다.

아래처럼 @Param을 명시하지 않으면 각각의 파라미터를 #{param1}, #{param2}로 참조해야 한다.

이는 가독성이 크게 떨어지므로 @Param을 명시하여 사용하는 것이다.

 

 

@Param을 사용하지 않았을 경우

public List<ReplyVO> getListWithPaging(
        Criteria cri,
        Long bno
);

 

XML에서는 #{param1}, #{param2}로 받는다.

<select id="getListWithPaging" resultType="org.zerock.domain.ReplyVO">
    SELECT RNO, BNO, REPLY, REPLYER, REPLYDATE, UPDATEDATE
    FROM TBL_REPLY
    WHERE BNO = #{param2}
    ORDER BY RNO ASC
</select>