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

就可以解决这个问题了。

相关推荐
BD_Marathon1 分钟前
【JavaWeb】JS_数据类型和变量
开发语言·javascript·ecmascript
卿雪17 分钟前
认识Redis:Redis 是什么?好处?业务场景?和MySQL的区别?
服务器·开发语言·数据库·redis·mysql·缓存·golang
..空空的人20 分钟前
C++基于protobuf实现仿RabbitMQ消息队列---接口介绍
开发语言·c++·rabbitmq
骇客野人21 分钟前
JAVA获取一个LIST中的最大值
java·linux·list
JIngJaneIL23 分钟前
基于Java失物招领系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·vue
程序员岳焱24 分钟前
Java泛型高级玩法:通配符、上下界与类型擦除避坑实战(纯干货,附完整工具类)
java·后端·程序员
期待のcode24 分钟前
MyBatis-Plus基本CRUD
java·spring boot·后端·mybatis
❀͜͡傀儡师24 分钟前
maven 仓库的Central Portal Namespaces 怎么验证
java·maven·nexus
豐儀麟阁贵25 分钟前
9.3获取字符串信息
java·开发语言·前端·算法
Mai Dang26 分钟前
黑马Mybatis-Plus学习笔记
笔记·学习·mybatis