티스토리 뷰
백엔드 교육 Project
[Spring] org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'deliveryId' not found. Available parameters are [arg1, arg0, param1, param2]
Ji@n 2024. 5. 20. 16:23문제 상황 :
메서드를 호출할 때, 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 인터페이스
+ 파라미터가 2개인 삭제 메소드도 같은 오류가 남
해결
'백엔드 교육 Project' 카테고리의 다른 글
현재 날짜와 예상 날짜 비교하기 (0) | 2024.07.03 |
---|---|
배송조회 페이지 연결하기 (0) | 2024.05.28 |
[SQLdeveloper] 요청한 작업을 수행하는 중 오류 발생:IO 오류: The Network Adapter could not establish the connection (CONNECTION_ID=P1zu7dtNQjqQ6xWHQ3g4/w==)업체 코드 17002 (0) | 2024.05.20 |
배송지 등록 _ 우편 API 사용하기 (0) | 2024.05.16 |
Spring Project 기본 설정 하기 / git bush (0) | 2024.04.30 |