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

就可以解决这个问题了。

相关推荐
月空MoonSky几秒前
解决使用Notepad++出现异型字或者繁体字体问题
java·javascript·notepad++
hqwest2 分钟前
码上通QT实战37--项目总结
开发语言·qt·软件开发·系统集成·设备选型
星迹708 分钟前
C语言相关的数电知识
c语言·开发语言
hakesashou9 分钟前
python 如何使数组中的元素不重复
开发语言·python
2501_9444241210 分钟前
Flutter for OpenHarmony游戏集合App实战之消消乐下落填充
android·开发语言·flutter·游戏·harmonyos
Filotimo_10 分钟前
JWT的概念
java·开发语言·python
min18112345611 分钟前
软件升级全流程步骤详解
android·java·服务器
黎雁·泠崖13 分钟前
Java字符串系列总结篇|核心知识点速记手册
java·开发语言
biyezuopinvip19 分钟前
基于Spring Boot的社区互助平台设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·社区互助平台设计与实现
JNU freshman30 分钟前
从 Ceph 16(Pacific)到 Ceph 18(Reef):cephadm 的伸缩性演进与 cephadm agent 到底“成熟”了吗?
java·大数据·ceph