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

就可以解决这个问题了。

相关推荐
友友马10 分钟前
『QT』事件处理机制详解 (一)
开发语言·qt
q***441511 分钟前
Spring Security 新版本配置
java·后端·spring
o***741720 分钟前
Springboot中SLF4J详解
java·spring boot·后端
孤独斗士23 分钟前
maven的pom文件总结
java·开发语言
confiself24 分钟前
通义灵码分析ms-swift框架中CHORD算法实现
开发语言·算法·swift
1024小神25 分钟前
在 Swift 中,self. 的使用遵循明确的规则
开发语言·ios·swift
Swift社区28 分钟前
Swift 类型系统升级:当协议遇上不可拷贝的类型
开发语言·ios·swift
chengpei14729 分钟前
I²C协议简介
c语言·开发语言
唐古乌梁海29 分钟前
【IT】常见计算机编程语言多继承问题
开发语言
雨中散步撒哈拉32 分钟前
18、做中学 | 初升高 | 考场一 | 面向过程-家庭收支记账软件
开发语言·后端·golang