MyBatis的xml里#{}的参数为null报错、将null作为参数传递报错问题

今天在调试的过程中发现一个bug,把传入的参数写到查询分析器中执行没有问题,但是在程序中执行就报错:org.springframework.jdbc.UncategorizedSQLException : Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException:无效的列类型

网上找了很久,才找到了错误原因:myBatis的参数,不能传入null(但是在查询分析器中参数为null是允许的),如果传入了null,SQL在类型匹配时找不到匹配的类型,就会报上面的错。

解决办法:

1、在参数后面添加jdbcType=VARCHAR

2、使用if标签

<if test="id != null and id !=''">

and id = #{id}

</if>

3、将null替换成""字符串;

例如:把 insert into user(id,name) values(#{id},#{name})

修改成:insert into user(id,name) values(#{id,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR})

就可以解决这个问题了。

相关推荐
x***381628 分钟前
springboot和springframework版本依赖关系
java·spring boot·后端
故事不长丨33 分钟前
C#定时器与延时操作的使用
开发语言·c#·.net·线程·定时器·winform
hefaxiang35 分钟前
C语言常见概念(下)
c语言·开发语言
S***848843 分钟前
SpringSecurity踢出指定用户
java
p***s9144 分钟前
Spring数据库原理 之 DataSource
java·数据库·spring
adobehu1 小时前
麒麟系统安装jdk17
java·jdk
欧阳天风1 小时前
js实现鼠标横向滚动
开发语言·前端·javascript
spencer_tseng1 小时前
java.util.IllegalFormatPrecisionException
java·printf
虹科网络安全1 小时前
艾体宝干货 | Redis Java 开发系列#1 从零开始的环境搭建与实践指南
java·数据库·redis
铅笔侠_小龙虾1 小时前
Arthas 命令
java·jvm