여니의 성장 diary
728x90
반응형
// DAO Interface
Boolean loginConfirm(String id, String pwd);

// Service Class
public boolean loginConfirm(String id, String pwd) {
	return memberDao.loginConfirm(id, pwd);
}

// Mapper
<select id="loginConfirm" resultType="Boolean">
	select
	decode(count(*),1,'true','false') as loginResult from universe_mem
	where id=#{id} and pwd=#{pwd}
</select>

해당 코드로 Junit Test를 돌렸는데 계속해서 해결되지 않는 오류가 발생😂

 

오류의 내용은 다음과 같았다.

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException:

Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]

 

id 파라미터 값은 잘 불러오는 것을 확인하였고, 어떤 부분이 잘못되었는지 못 찾다가

DAO Interface에서 2개 이상의 객체는 구분하지 못한다는 것을 알게되었다.

그렇기 때문에 @Param 어노테이션으로 id값과 pwd값을 구분해주어야 올바르게 찾을 수 있었다.

 

그런데 해당 오류를 해결하고나니 다시 마주하게 된 또 다른 오류...😥

 

org.springframework.jdbc.UncategorizedSQLException:

Error attempting to get column 'LOGINRESULT' from result set.  Cause:

java.sql.SQLException: 내부 표기로 변환할 수 없습니다

 

결론부터 이야기하자면 Boolean 타입이 아닌 String 타입으로 결과를 받아와서

Service, 또는 Controller에서 Boolean 타입으로 변환을 해주어야 해결되는 오류였다.

 

// DAO Interface
String loginConfirm(@Param("id") String id, @Param("pwd") String pwd);

// Service Class
public boolean loginConfirm(String id, String pwd) {
	String loginConfirm = memberDAO.loginConfirm(id, pwd);
	Boolean loginResult = Boolean.parseBoolean(loginConfirm);
	return loginResult;
}

// Mapper
<select id="loginConfirm" resultType="String">
	select
	decode(count(*),1,'true','false') as loginResult from universe_mem
	where id=#{id} and pwd=#{pwd}
</select>

 

2개 이상의 객체를 파라미터로 받는 경우 @Param 어노테이션으로 구분해주고,

Database에서의 SQL문 결과값을 String으로 받아 Boolean으로 타입을 변환해주면

오류없이 원하는 결과를 얻을 수 있는 것을 확인하였다☺

 

기본적으로 알고 있어야 할 부분에서 놓쳤던 내용으로 인해 오류가 발생했던 부분이라

다시 한 번 기억하기 위해서 기록하는 오늘의 오류 해결 과정이었습니다~~~!

 

 

728x90
반응형
profile

여니의 성장 diary

@pponyo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!