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

就可以解决这个问题了。

相关推荐
一颗青果11 分钟前
C++的锁 | RAII管理锁 | 死锁避免
java·开发语言·c++
一分之二~13 分钟前
回溯算法--解数独
开发语言·数据结构·c++·算法·leetcode
Gofarlic_oms114 分钟前
跨国企业Cadence许可证全球统一管理方案
java·大数据·网络·人工智能·汽车
Smilecoc20 分钟前
ChromeDriverManager:自动下载和管理chromedriver版本
开发语言·python
天燹31 分钟前
Qt 6 嵌入 Android 原生应用完整教程
android·开发语言·qt
liu****42 分钟前
第一章 Qt 概述
开发语言·c++·qt
知行合一。。。44 分钟前
Python--04--数据容器(列表 List)
开发语言·python
J_liaty1 小时前
Spring Security整合JWT与Redis实现权限认证
java·redis·spring·spring-security
程芯带你刷C语言简单算法题1 小时前
Day48~对于高度为 n 的台阶,从下往上走,每一步的阶数为 1,2,3 中的一个。问要走到顶部一共有多少种走法
c语言·开发语言·学习·算法·c
csbysj20201 小时前
SQL NOT NULL约束详解
开发语言