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

就可以解决这个问题了。

相关推荐
千穹凌帝2 分钟前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
AlexMercer10124 分钟前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法
Jarlen5 分钟前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
friklogff5 分钟前
【无标题】云端之C#:全面解析6种云服务提供商的SDK
开发语言·flask·c#
蓑 羽11 分钟前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool18 分钟前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言
海里真的有鱼19 分钟前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
工业甲酰苯胺30 分钟前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
zxctsclrjjjcph35 分钟前
【C语言】常见的C语言概念
c语言·开发语言