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})

就可以解决这个问题了。

相关推荐
我命由我12345几秒前
Java 开发 - Objects 的 requireNonNull 方法
java·服务器·开发语言·后端·学习·java-ee·学习方法
想做后端的前端2 分钟前
Lua的热更新
开发语言·lua
隐退山林14 分钟前
JavaEE初阶:多线程进阶
java·开发语言
lead520lyq16 分钟前
Golang Protoc Grpc实现微服务通信
开发语言·微服务·golang
BHXDML17 分钟前
Python:(一)变量、类型与 f-string —— 数据的载体
开发语言·python
JMchen12317 分钟前
Android剪切板工具类ClipBoardUtil:简化剪切板操作
android·java·移动开发·android studio
蒹葭玉树26 分钟前
【C++上岸】C++常见面试题目--操作系统篇(第二十七期)
java·c++·面试
学嵌入式的小杨同学28 分钟前
【Linux 实战】Makefile 自动化构建进阶:静态库 / 动态库通用模板(一键编译 + 系统安装)
linux·开发语言·git·vscode·spring·vim·ux
小孟的CDN29 分钟前
一维热传导方程的PINN求解——损失函数实时绘制
开发语言·python
透明的玻璃杯32 分钟前
VS2015+QT5程序发布
开发语言·qt