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

就可以解决这个问题了。

相关推荐
不绝19110 小时前
C#核心——面向对象:封装
开发语言·javascript·c#
没有bug.的程序员10 小时前
HashMap 源码深度剖析:红黑树转换机制与高并发性能陷阱
java·性能优化·并发编程·源码分析·红黑树·hashmap·技术深度
yaoxin52112311 小时前
294. Java Stream API - 对流进行归约
java·开发语言
ghie909011 小时前
基于MATLAB的演化博弈仿真实现
开发语言·matlab
曹轲恒11 小时前
Thread.sleep() 方法详解
java·开发语言
aini_lovee11 小时前
基于Qt实现CAN通信上位机
开发语言·qt
Coder_Boy_11 小时前
基于SpringAI的在线考试系统-考试模块前端页面交互设计及优化
java·数据库·人工智能·spring boot
小小仙。11 小时前
IT自学第十九天
java·开发语言
悟空码字11 小时前
SpringBoot集成Hera,分布式应用监控与追踪解决方案
java·springboot·编程技术·后端开发·hera
砚边数影11 小时前
Java基础强化(三):多线程并发 —— AI 数据批量读取性能优化
java·数据库·人工智能·ai·性能优化·ai编程