- 之前一直使用mysql,然后执行sql语句时,如果插入的字段是Null, 可以正常执行(没有设置约束),但换成oracle之后,同样的语句执行却会出现报错的情况,后来发现是MyBatis对于默认值处理的问题;
在mybatis的文档中有以下介绍:
就是当你的sql语句中赋值的某个字段为NULL空值时,则MyBatis默认值为OTHER,但是mysql能处理OTHER当成NULL,所以mysql不会出现报错的情况,但oracle不能识别并将OTHER转换成NULL,所以会报错;
过程:null ->jdbcTypeForNull -> other
解决方法:
- 手动告诉oracle,指定OTHER是NULL
< insert id=“addStudent” databaseId=“oracle”>
insert into student(stuno,stuName)
values(#{stuNo} , #{stuName,jdbcType=NULL})
< /insert>
其中当stuName为NULL即没有传值时,则传过去的为NULL,也不会影响正常的赋值;
- 全局变量设置
在XML中的< settings></ settings>中配置:
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
全局变量设置会好一些,不用每个都加上jdbcType=NULL,而且不会影响之前的代码;