//mapper
<select id="getUserInfo" parameterType="String" resultType="Board">
SELECT
boardseq, memberid, membername, title,
to_char(regdate, 'YYYY-MM-DD HH24:MI:SS') as regdate
FROM m_board
WHERE memberid = #{memberid}
ORDER BY boardseq DESC, regdate DESC
</select>
다음과 같이 DB에 저장된 게시글을 memberid가 동일한지를 비교하여 select 하기 위한 코드를 작성했는데 오류가 발생했다.
nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='memberid', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null', jdbcType=null, expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 부적합한 열 유형: 1111
이 에러는 MyBatis가 데이터베이스 열에 대한 매핑 문제로 인해 SQL 문을 실행하지 못할 때 발생한다.
이 에러의 메시지를 살펴보면, 'Could not set parameters for mapping'라는 메시지와 'Error setting null for parameter #2 with JdbcType OTHER'라는 메시지가 있다.
이것은 MyBatis가 인자 매핑에 문제가 있다는 것을 나타낸다.
MyBatis가 매핑한 두 번째 매개 변수에 null 값을 할당할 수 없으며, 이를 JDBC 유형 OTHER와 함께 사용할 수 없기 때문에 오류가 발생했다.
jdbcType을 varchar로 지정해주니 해결이 되었다.
#{memberid, jdbcType=VARCHAR}
<select id="getUserInfo" parameterType="String" resultType="Board">
SELECT
boardseq, memberid, membername, title,
to_char(regdate, 'YYYY-MM-DD HH24:MI:SS') as regdate
FROM m_board
WHERE memberid = #{memberid, jdbcType=VARCHAR}
ORDER BY boardseq DESC, regdate DESC
</select>