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

就可以解决这个问题了。

相关推荐
杀死那个蝈坦14 小时前
Docker
java·docker·eclipse·tomcat·hibernate
a31582380614 小时前
Android13隐藏某个App需要关注的源码文件
android·java·framework·launcher3·隐藏app
悟空码字14 小时前
SpringBoot实现消息推送:让服务器学会“主动搭讪”
java·spring boot·后端
拾忆,想起14 小时前
Dubbo序列化异常终结指南:从精准诊断到根治与防御
开发语言·前端·微服务·架构·php·dubbo·safari
waves浪游14 小时前
进程控制(中)
linux·运维·服务器·开发语言·c++
0 0 014 小时前
CCF-CSP 36-3 缓存模拟(cache)【C++】
开发语言·c++·算法
蒟蒻小袁14 小时前
Hot100--找到字符串中所有字母异位词
java·算法·leetcode·面试
wjs202414 小时前
C# 环境:深入解析与优化实践
开发语言
满天星830357714 小时前
【Linux】信号(上)
linux·运维·服务器·开发语言·c++