使用Mybatis和ojdbc14.jar为参数设置null时出错

Gar*_*ryX 4 java mybatis ojdbc

将参数设置为null时出错.

使用ojdbc14.jar时只会出现此问题.使用ojdbc6.jar时,没问题.

我在mybatis配置xml中有此设置

<settings>
    <setting name="jdbcTypeForNull" value="NULL"/>
</settings>
Run Code Online (Sandbox Code Playgroud)

错误消息是:

Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType NULL . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull
Run Code Online (Sandbox Code Playgroud)

xml中的sql是

<update id="rename" parameterType="Element">
    update dsb_element t set t.elementname = #{elementName} where t.elementid = #{elementId}
</update>
Run Code Online (Sandbox Code Playgroud)

java调用它

 com.my.Element ele = new Element();
    ele.setElementId("some-id");
    ele.setElementName(null);
    sqlSession.update(getMyBatisId("rename"), element) ;
Run Code Online (Sandbox Code Playgroud)

问题是:

这是ojdbc14.jar的问题,如果是,为什么?

我知道我可以使用#{elementName,jdbcType = VARCHAR2}解决它,但我的项目到处都有很多这个问题,很快就会到期.我不想改变所有这些.

Mou*_*una 5

问题是,从3.0.x版本开始,null参数的默认JDBC类型Types.OTHER不受某些JDBC驱动程序(如Oracle 10g)的支持.

这里有一篇文章解释了这个问题.

我找到了解决办法很简单,我设置jdbcTypeForNullNULL该配置文件中

<configuration>
    <properties resource="mybatis-config.properties" />
    <settings>
        <setting name="jdbcTypeForNull" value="NULL" />
    </settings>

    <environments default="development">
    ....
    </environments>

    <mappers>
    ....
   </mappers>
</configuration>
Run Code Online (Sandbox Code Playgroud)