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

就可以解决这个问题了。

相关推荐
爱学习的阿磊12 小时前
C++代码冗余消除
开发语言·c++·算法
sg_knight12 小时前
抽象工厂模式(Abstract Factory)
java·python·设计模式·抽象工厂模式·开发
春日见12 小时前
win11 分屏设置
java·开发语言·驱动开发·docker·单例模式·计算机外设
2301_7800290412 小时前
支付宝sdk导入错误
java·开发语言·maven
码界奇点13 小时前
基于Spring Boot和Vue3的无头内容管理系统设计与实现
java·spring boot·后端·vue·毕业设计·源代码管理
九皇叔叔13 小时前
【03】微服务系列 之Nacos 注册中心(服务注册)
java·微服务·nacos·架构·注册中心·服务注册
木辰風13 小时前
PLSQL自定义自动替换(AutoReplace)
java·数据库·sql
2501_9445255413 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
heartbeat..13 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
14 小时前
java关于内部类
java·开发语言