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

就可以解决这个问题了。

相关推荐
曹轲恒1 天前
Java中断
java·开发语言
xxxmine1 天前
Java并发wait(timeout)
java
冰冰菜的扣jio1 天前
Redis缓存问题——一致性问题、事务、持久化
java·spring·mybatis
施棠海1 天前
监听与回调的三个demo
java·开发语言
時肆4851 天前
C语言造轮子大赛:从零构建核心组件
c语言·开发语言
赴前尘1 天前
golang 查看指定版本库所依赖库的版本
开发语言·后端·golang
de之梦-御风1 天前
【C#.Net】C#开发的未来前景
开发语言·c#·.net
毕设源码-钟学长1 天前
【开题答辩全过程】以 家政服务平台为例,包含答辩的问题和答案
java
知乎的哥廷根数学学派1 天前
基于数据驱动的自适应正交小波基优化算法(Python)
开发语言·网络·人工智能·pytorch·python·深度学习·算法
de之梦-御风1 天前
【C#.Net】C#在工业领域的具体应用场景
开发语言·c#·.net