본문으로 바로가기

스프링에서 마이바티스를 활용하여 파라미터 두 개를 넘겨줄때 @Param을 이용합니다. 다음 두 가지 경우가 있습니다.

 

 

1. 일반 타입 변수 1개 또는 여러 개

public void updateReplyCnt(@Param("bno") Long bno,@Param("amount") int amount);

이렇게 @Param으로 넘겨주고 mapper.xml에서는 이를 사용할 때 

 

<update id="updateReplyCnt">
	update jeongchan_board set replyCnt = replyCnt +#{amount} where bno = #{bno}
</update>

1개일 때도 마찬가지입니다. 즉 bno, amount 명을 그대로 쓰면 됩니다.

 

2. 객체 1개와 일반 타입 변수 여러개

만약에 객체 한 개만 넘겨준다면 예를 들어서 UserVO를 넘겨준다면 해당 명은 필요없고 UserVO에 있는 변수명을 그대로 mapper.xml에서 사용하면 됩니다.

 

여기서 주의사항으로 객체 1개와 일반 타입 변수 여러개인 복수 파라미터일 경우

 

무조건 파라미터의 객체 이름으로 참조를 해서 mapper.xml에서 사용해야합니다.

 

예를 들어

public List<BoardVO> getMyList(@Param("cri") Criteria2 cri,@Param("writer") String writer);

해당 cri.xxx 으로 참조를 해서 xml에서 참조해야합니다.

 

<!-- 자기가 쓴 글 조회 -->
<select id="getMyList" resultType="com.jeongchan.domain.BoardVO">
	<![CDATA[
		select bno,title,content,writer,regdate,updatedate,viewcnt,replycnt,filecnt
		from
		(
			select /*+INDEX_DESC(jeongchan_board pk_jc_board)*/
				rownum rn,bno,title,content,writer,regdate,updatedate,viewcnt,replycnt,filecnt
			from
				jeongchan_board
			where 
			
	]]>	
	<!-- prefixOverrides는 OR로 시작 될경우 제거해주고 시작한다. 밑에서 중간에 OR을 넣어주기 위함 -->
	<!-- collection이 typeArr인 이유는 마이바티스는 빈이아닌 get/set 메서드 이름을 보고 판단하기 때문에 Criteria에서 getTypeArr를 보고 typeArr로 판단한다. -->

	
	<![CDATA[
			rownum<=#{cri.pageNum} * #{cri.amount} 
		)
		where rn>(#{cri.pageNum}-1)*#{cri.amount} and writer = #{writer}
		
	]]>
</select>

여기서 보면 cri.pageNumcri.amount 이런 식으로 사용합니다.

 

만약에 그냥 pageNum으로 사용할 경우 파라미터를 찾지 못한다는 에러 발생과 동시에 멘탈이 깨집니다...