웹 개발/오류

MyBatis - 부적합한 열 유형 1111

크리스피코드 2023. 1. 20. 12:48

MyBatis를 사용하면서 '부적합한 열 유형 1111' 이라는 오류가 발생하는 일이 있었다.

 

위 오류의 원인은 다음과 같다.

 

1. 테이블 컬럼의 데이터 타입과 대입하는 데이터 타입이 다를 경우

2. Map 또는 VO 객체를 parameterType으로 했을 때, 컬럼에 대입되는 특정 값이 null일 경우

 

1번의 경우, 데이터베이스와 MyBatis로 데이터를 넘기는 객체의 데이터 타입을 일치시키면 된다.

 

2번의 경우, MyBatis의 옵션을 설정하는 configuration.xml 파일에서 setting에 jdbcTypeForNull의 값을 NULL로 설정하면 된다.

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
        <setting name="jdbcTypeForNull" value="NULL"/>
    </settings>
    <typeAliases>
        <typeAlias type="kr.or.ddit.vo.BookVO" alias="bookVO" />
    </typeAliases>
    
</configuration>

 

 

매퍼 xml 파일에서 parameterType의 데이터를 SQL에 대입하는 구문에 jdbcType=VARCHAR를 명시하여 해결하는 것도 가능하다.

 

#{content, jdbcType=VARCHAR}

 

 

위와 같이 설정한 후 테스트해보면 null값이 데이터베이스에도 null로 삽입되는 것을 확인할 수 있다.