关于一个mybatis中出现的一个500的问题:Could not set parameters for mapping: ParameterMapping{property='zonggao',……

本文解决了一个在使用MyBatis框架时遇到的更新语句参数类型不匹配问题,详细阐述了从发现问题、排查原因到最终解决的过程,强调了在SQL语句中使用#号与美元符的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述上面的图就是我出现的问题;
一开始很不理解,以为是前台传值给后台只能传String类型,而后台打包接收对应参数的类型是int所以会出现这种参数不匹配的问题;
但是后来一想,并不是啊。因为之前有一个类似的功能页面内容基本完全一样,参数也都正常传递过去了没跳这样的500,为什么这里过不去了呢?
为了验证,还在后台代码里加入了一堆打印输出:比如这样的
在这里插入图片描述看到参数传到后台正常,证明不是传数据到后台的问题,那就找传数据到数据库的问题吧,就是mybatis的部分了;(我用的是SSM),最终找到症结在于sql语句,之前也查过,因为在Root cause里也有提示sql方面有问题,但是英文不好,看不懂,回去看语句也没感觉哪不合适;
最终原因是:
前面同样的类似页面用的SQL语句是:insert into table set values(#{xxx},#{xxx})
而这次用的SQL语句是:update table set yyy=’#{xxx}’,zzz=#{xxx},……
把#号改成美元符就正常了
即:update table set yyy=‘美元符{xxx}’,zzz=${xxx},……
我记得美元符是通过Statement处理的数据,#号是通过PreparedStatement处理的数据,所以用#号的时候参数传过去都是加了引号的就相当于String类型,而数据库中对应的是int类型,所以才会出现参数不匹配的情况;
本文仅用于给我这个英语不好的菜鸟提供一个纠错笔记,以免犯类似错误。如果有幸能帮助到别人,那就太意外了!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值