MyBatis 마이바티스 오류
TypeException : Could not set parameters for mapping
부적합한 열 인덱스
MyBatis 오류 중
제일 자주 발생하는 오류 중
하나를 정리해보려고 한다.
혹시나 MyBatis가 어떤 역할을 하는지 모르는 사람들을 위해서
간단하게 개념을 정리해보려고 한다.
MyBatis(마이바티스)란?
마이바티스는 DB(데이터베이스)를 쉽게 다룰 수 있도록 도와주는 오픈 소스 프레임 워크이다.
Object-Relational Mapping : ORM
마이바티스를 사용하여 데이터베이스쿼리와 프로그래밍 언러 코드를 분리하여
유지보수성과 생산성을 높이기 위해 사용한다.
즉, 마이바티스를 사용하면 DB연결 및 쿼리작성을 쉽게 다룰 수 있다!
그리고, 동적 쿼리 작성이 가능하기 때문에 편리하다.
이제 해당 오류에 대해 알아보자.
아래는 콘솔창에 찍힌 에러 로그이다.
com.xxx.xxx.CommonService Impl: 213 org.mybatis.spring. MyBatisSystemException:
nested exception is org.apache.ibatis.type.TypeException : Could not set parameters for mapping:
Parameter Mapping(property= 'orderNo'. mode=IN, javaType=class java.lang.Obje ct, jdbcType=null, numericScale=null, result MapId='null', jdbcTypeName='null'. expression='null').
Cause: org.apache.ibatis.type. TypeException: Error setting non n ull for parameter #3 with JdbcType null Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type. TypeException: Error setting non null for parameter #3 with JdbcType null.
Try setting a different JdbcType for this parameter or a different configuration property.
Cause: java.sql.SQLException: 부적합한 열 인덱스
🔍 오류 원인
해당 에러는
MyBatis가 데이터베이스 열에 대한 매핑 문제로 인해
SQL 문을 실행하지 못할 때 발생한다.
메시지를 보면,
'Could not set parameters for mapping' 메시지가 있는데,
이뜻은 MyBatis가 인자 매핑에 문제가 있다는 것을 나타낸다.
즉,
✅ PreparedStatement로 쿼리문 작성시
파라미터를 물음표로 표시하고
"PreparedStatement변수명.setString(몇번째 물음표인지 숫자로 표시, 들어갈 값)"
위와 같은 식으로 작성하게 되는데..
여기서 들어갈 값이 부적합해서 발생하는 에러다 !
🔍 해결 과정
타 업체가 제공해준 쿼리를
내가 살짝 가공해서 UPDATE문을 만들고
테스트를 해보았는데
마이바티스 오류가 발생했다.
아무리 눈을 씻고 보아도 틀린게 없는데 거의 1시간 동안 붙잡고 있었다 . . .
구글 검색시 나온 해결 방법들을 봐도 나는 틀린게 없는데 뭘까 했는데 . . .
업체가 제공해준 쿼리 중 일부분
BOOK_XXX = 'I’
’ <= 이 따옴표가 문제였다 . . .
자세히 보면 ' <= 와 다른 모양을 가지고 있다.
이것 때문에 계속 오류가 발생했다. . .
(정말 안보였음 . . )
나같은 경우에는 이런 문제였다.
구글에서 찾은 검색 결과 또는 문서등 에서
텍스트를 복사하고 붙여넣을때 특수문자기호들을 잘 확인해야한다.
제일 많이 하는 실수 중 대표적인 예 가
, (쉼표) 와 . (마침표) 이다.
이 둘도 자세히 보지 않으면 매우 비슷하게 생겼기 때문이다.
마지막으로,
부적합한 열 인덱스 오류가 발생하는 원인을 정리를 하면
🔍 정리
1. 변수명이 잘못된 경우
2. 쿼리의 주석에 변수가 포함되어 있는 경우
3. 파라미터(parameter)가 null 값으로 들어가는 경우
4. 쿼리문 내에 특수문자 기호 주의
쿼리 작성시