MyBatis 参数允许为空的异常解决方案

5 篇文章 0 订阅
4 篇文章 0 订阅
最近在做一个采用了 MyBatis 框架的项目时,遇到一个这样的问题:

数据库中有一个表,表中有一个字段允许为空,因此,在 Java 代码中为这个表插入数据时,我们通常对该字段的处理大概是这样的:如果有值,自然是通过其 setter() 方法设置上即可;如果没有值,情况稍微麻烦一点点,一种做法是通过 setter() 方法传入 null 值,另一种做法是什么都不做(即不调用 setter() 方法)。对于以上两种情况,有值时自然一切顺利(除非你的程序设计本身烂得不行偷笑);如果没有值时,问题接着就来了,运行时将抛出一类似以下这样的异常:

org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter.  Most JDBC drivers require that the JdbcType must be specified for all nullable parameters...

经过仔细研究和查阅资料,终于知道问题的根源了。原来出现这个异常的原因在于,MyBatis 不知道你传入的 null 参数对应的 jdbc 类型是什么,因为在 MyBatis 看来,null 在数据库中可以为多种类型(例如,可以为 CHAR、VARCHAR、DATE 等),于是 MyBatis 就傻眼了,解决办法自然是你要告诉 MyBatis 这个 null 对应的 jdbc 类型是什么。于是得出的答案如下:

在你相应的 Mapper 中,传入该参数的地方写明 jdbc 类型即可,比如原来传参数是这样写的:#{myNullParameter},把它改成这样写即可:#{myNullParameter, jdbcType=VARCHAR}


OK,问题得以解决,祝君好运···


注:如果转载,请注明出处,尊重作者就是尊重自己~
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值