MyBatis 관련 생각하지 못한 오류

홍석진·2022년 3월 2일
0

Spring

목록 보기
6/6

발단

Spring Project에서 MyBatis의 동적쿼리로 조건을 주는 중에 조건을 주기 전까지는 문제없던 부분에서 갑자기 조건을 주고나서 error가 발생하기 시작했다.

### Cause: java.lang.NumberFormatException: For input string: 'Y'

에러가 난 부분을 찾아봐도 뭐가 문제인지 알 방법이 없었다. 내가 작성했던 코드이다.

<if test="IsExhidition  == 'Y'">
	AND	exhidition_yn is null
</if>

분명히 IsExhidition는 String 타입인데 무슨 문제일까 하고 찾아보니 MyBatis 사용 시 많이 범하는 실수로 내가 작성한 코드의 ""와 ''를 바꾸면 해결된다고 한다. 다음과 같이 변경했다.

<if test='IsExhidition  == "Y"'>
	AND	exhidition_yn is null
</if>

원인

이러한 에러의 원인은 내가 보기에는 String형인 IsExhidition과 String처럼 보이는 'Y'와 비교하는 부분이 MyBatis에서는 'Y'값을 숫자로 인식하려고 해서 NumberFormatException이 뜨면서 오류가 나고 있는 것입니다. 왜 MyBatis에서는 'Y'를 숫자로 인식하려 하는지... 찾아보니 Mybatis에서는 'Y'라는 문자열을 C의 char과 같이 취급을 해서라고 합니다. MyBatis는 ''안에 charSeqence(문자열여러개)가 있으면 Object를 String으로, ''안에 'Y'처럼 한글자만 있으면 이것을 charactor 인식해버립니다. 그래서 제가 제 코드에서 'Y'와 String을 비교하려 했을 때 에러가 발생한 것이죠. 제가 지금까지 프로젝트를 하면서는 비교값을 1,2처럼 integer로 받거나 'all', 'tech' 등 에러가 나지 않을 상황들이었던 겁니다. 결국 만날 에러를 미리 만나서 다행입니다. 자바스크립트나 ""와 ''를 혼용하는 많은 상황에서도 발생할 수 있는 문제라고 하는데 제가 해결한 방법인 ""로 String임을 선언하는 방법은 다음에 비슷한 에러가 발생했을 때 해결하는데 많은 도움이 될 것 같습니다. 습관적으로 String은 ""안에서 비교하는 습관을 들여야 겠습니다.

profile
질문이나 의견이 있으시면 남겨주세요. 서로의 발전이라고 생각합니다.

0개의 댓글