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

就可以解决这个问题了。

相关推荐
kucupung9 分钟前
【C++基础】多线程并发场景下的同步方法
开发语言·c++
chengpei14715 分钟前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
Quantum&Coder15 分钟前
Objective-C语言的计算机基础
开发语言·后端·golang
五味香17 分钟前
Java学习,List 元素替换
android·java·开发语言·python·学习·golang·kotlin
Joeysoda20 分钟前
Java数据结构 (从0构建链表(LinkedList))
java·linux·开发语言·数据结构·windows·链表·1024程序员节
迂幵myself20 分钟前
14-6-1C++的list
开发语言·c++·list
扫地僧00923 分钟前
(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
java·开发语言
天乐敲代码23 分钟前
JAVASE入门九脚-集合框架ArrayList,LinkedList,HashSet,TreeSet,迭代
java·开发语言·算法
一个处女座的暖男程序猿34 分钟前
MyBatis Plus 中常用的 Service 功能
linux·windows·mybatis
endcy20161 小时前
IoTDB结合Mybatis使用示例(增删查改自定义sql等)
java·mybatis·iotdb