mapper接口参数存在null时 MySQL与Oracle的不同处理

    科技2025-10-10  15

    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>

    即可

    Processed: 0.010, SQL: 8