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

就可以解决这个问题了。

相关推荐
哈哈不让取名字4 分钟前
分布式日志系统实现
开发语言·c++·算法
3GPP仿真实验室4 分钟前
【MATLAB源码】6G:感知辅助毫米波 MIMO 信道估计仿真平台
开发语言·matlab·智能电视
芬加达6 分钟前
leetcode221 最大正方形
java·数据结构·算法
猿小羽16 分钟前
深度实战:Spring AI 与 MCP(Model Context Protocol)构建下一代 AI Agent
java·大模型·llm·ai agent·spring ai·开发者工具·mcp
catchadmin17 分钟前
Laravel12 + Vue3 的免费可商用 PHP 管理后台 CatchAdmin V5.1.1 发布
开发语言·php
曾几何时`23 分钟前
二分查找(十)1146. 快照数组 pair整理
java·服务器·前端
编程(变成)小辣鸡35 分钟前
JVM、JRE和JDK 的关系
java·开发语言·jvm
lbb 小魔仙1 小时前
【Java】Spring Cloud 微服务系统搭建:核心组件 + 实战项目,一步到位
java·spring cloud·微服务
a程序小傲1 小时前
得物Java面试被问:流批一体架构的实现和状态管理
java·开发语言·数据库·redis·缓存·面试·架构
xb11321 小时前
C#异步编程入门概念及核心概念
开发语言·c#