티스토리 뷰

문제 상황 : 
메서드를 호출할 때, MyBatis가 파라미터를 올바르게 인식하지 못하기 때문에 발생.

 

 

아래는 기존 Mapper 인터페이스

// 배송지 상세 조회 (수정페이지) by deliveryId and memberId
public DeliveryVO selectBydeliveryId( int deliveryId, String memberId); 

 

Mapper.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.web.vop.persistence.DeliveryMapper">

   <resultMap type="com.web.vop.domain.DeliveryVO" 
   id="DeliveryResultMap">
      <id property="deliveryId" column="DELIVERY_ID" /> 
      <result property="memberId" column="MEMBER_ID"/>
      <result property="receiverName" column="RECEIVER_NAME"/>
      <result property="receiverAddress" column="RECEIVER_ADDRESS"/>
      <result property="receiverPhone" column="RECEIVER_PHONE"/>
      <result property="requirement" column="REQUIREMENT"/>
      <result property="deliveryAddressDetails" column="DELIVERY_ADDRESS_DETAILS"/>
      <result property="isDefault" column="IS_DEFAULT"/>
   </resultMap>
   

	
	<!-- 배송지 상세 조회 (수정페이지) by deliveryId and memberId-->
   	<select id="selectBydeliveryId" resultMap="DeliveryResultMap">
		SELECT * FROM DELIVERY WHERE DELIVERY_ID = #{deliveryId} AND MEMBER_ID = #{memberId}
	</select>
	
   
</mapper>

 

Service

 

package com.web.vop.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.web.vop.domain.DeliveryVO;

public interface DeliveryService {
	
	// 배송지 상세 조회 by deliveryId and memberId
	DeliveryVO getDeliveryById(int deliveryId, String memberId);
}

 

ServiceImple

package com.web.vop.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.web.vop.domain.DeliveryVO;
import com.web.vop.persistence.DeliveryMapper;

import lombok.extern.log4j.Log4j;

@Service
@Log4j
public class DeliveryServiceImple implements DeliveryService{
	
	@Autowired
	private DeliveryMapper deliveryMapper;
	


	// 배송지 상세 조회 by deliveryId and memberId
	@Override
	public DeliveryVO getDeliveryById(int deliveryId, String memberId) {
		log.info("getDeliveryById()");
		DeliveryVO result = deliveryMapper.selectBydeliveryId(deliveryId, memberId);
		log.info("getDeliveryById : " + result);
		return result;
	}//end getDeliveryById()

	
}

 

 

해결 : 
Mapper 인터페이스에 @Param 어노테이션을 사용하려 파라미터를 명시적으로 지정하기 
@Param 어노테이션은
MyBatis에서 SQL 매퍼 쿼리에 전달되는 파라미터의 이름을 명시적으로 지정하는데 사용되므로,
Mapper 인터페이스에서만 사용하면 된다.
service 인터페이스, service 구현 클래스에서는 필요하지 않다.

 

수정한 Mapper 인터페이스 

 

 

MapperTest

 

콘솔

 

 

 

 

+ 파라미터가 2개인 삭제 메소드도 같은 오류가 남

 

 

 

기존 Mapper 메소드

 

 

@Param 어노테이션을 적용한 메소드 파라미터

 

 

MapperTest

 

해결

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함