mybatis中Oracle参数为NULL错误问题及解决
mybatis中Oracle参数为NULL错误问题
在Mybatis操作Oracle数据库的时候( PS:mysql中不会出现),会遇到个小问题,
当数据库为Oracle时候,插入某个参数数据如果为null,mybatis会报错,提示类型不正确,
原因是当插入数据为null类型的时候,mybatis会自动转换为JdbcType.OTHER类型,因此需要修改一下参数的转换类型
有两种方式可以解决:
1.公共配置方法
在Mybatis配置中设置jdbcTypeForNull=NULL,
即:
<settings> <setting name="jdbcTypeForNull" value="NULL"/> </settings>
2.参数配置方法
修改mybatis的sql语句参数通配符,设置当参数为null时候采用 JdbcType.NULL类型
即:
select * from tb where name = #{name,jdbcType=NULL}如上两种方式配置,都可以解决Oracle下参数为null操作错误问题!
mybatis oracle insert 属性为null保存报错 无效的列类型1111
mybatis 数据库 oracle insert 时有些备用字段为空,保存报错,无效的列类型:1111
解决办法
1、修改配置文件 application.yml 增加配置 jdbc-type-for-null: 'null' ,单引号不要忘了
mybatis: mapper-locations: classpath:mapping/*/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl call-setters-on-nulls: true jdbc-type-for-null: 'null'
2、在SQL语句里相应的属性上带上JDBCType
3、增加配置类
查看mp-starter-源码, MybatisPlusAutoConfiguration, 可以发现,第119行有一个configurationCustomizers,可以修改configuration 自定义一个,配上就完工
@Bean
public ConfigurationCustomizer configurationCustomizer(){
return new MybatisPlusCustomizers();
}
class MybatisPlusCustomizers implements ConfigurationCustomizer {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setJdbcTypeForNull(JdbcType.NULL);
}4、
第一步:把 可更新为空的 javabean 属性前加上注解:
@TableField(el = "username, jdbcType=VARCHAR")
@Email @TableField(el = "email, jdbcType=VARCHAR") private String email;
第二步: 使用updateAllColumnById方法,而不是updateById. 如:
this.baseMapper.updateAllColumnById(user);
报错原因:
postgreSQL,MySQL,SQLSERVER都支持JdbcType.NULL类型,Oracle是不支持,适配的时候也因为这个问题导致mybatis报错。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java 中 Class Path 和 Package的使用详解
这篇文章主要介绍了Java 中 Class Path和Package的使用详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下2022-08-08
SpringBoot项目中使用Sharding-JDBC实现读写分离的详细步骤
Sharding-JDBC是一个分布式数据库中间件,它不仅支持数据分片,还可以轻松实现数据库的读写分离,本文介绍如何在Spring Boot项目中集成Sharding-JDBC并实现读写分离的详细步骤,需要的朋友可以参考下2024-08-08


最新评论