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

就可以解决这个问题了。

相关推荐
岚天start几秒前
Java程序生成Heap Dump堆内存快照文件的多种方法
开发语言·python·pycharm
一只叫煤球的猫5 分钟前
从 JDK1.2 到 JDK21:ThreadLocal的进化解决了什么问题
java·后端·面试
天马行空-16 分钟前
ES 精准匹配 和 模糊查询的实现方式
java·开发语言
Z***258024 分钟前
Java计算机视觉
java·开发语言·计算机视觉
Tiger_shl32 分钟前
SqlConnection、SqlCommand 和 SqlDataAdapter
开发语言·数据库·c#
一点事32 分钟前
ruoyi:集成mybatisplus实现mybatis增强
java·开发语言·mybatis
e***877034 分钟前
Tomcat Request Cookie 丢失问题
java·tomcat·firefox
你的冰西瓜38 分钟前
C++14 新特性详解:相较于 C++11 的主要改进
开发语言·c++·stl
linksinke39 分钟前
Mapstruct引发的 Caused by: java.lang.NumberFormatException: For input string: ““
java·开发语言·exception·mapstruct·numberformat·不能为空
无限进步_1 小时前
C语言单向链表实现详解:从基础操作到完整测试
c语言·开发语言·数据结构·c++·算法·链表·visual studio