mybatis对于null,会包装成other类型,mysql对于mybatis的other类型就是以null处理,所以mysql数据库可以不做以下配置,插入的就是null
Oracle不认识other类型,所以需要以下处理
第一种解决:
JDBC 要求,如果一个列允许使用 null 值,并且会使用值为 null 的参数,就必须要指定 JDBC 类型(jdbcType)。
要更进一步地自定义类型处理方式,可以指定一个特殊的类型处理器类(或别名),比如:
#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}
即在#{}中指定jdbcType
第二种解决:
根据官网描述:
jdbcTypeForNull | 当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 | JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。 | OTHER |
所以在配置文件中配置:
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
即可