为了账号安全,请及时绑定邮箱和手机立即绑定

异常记录——使用Mybatis报BindingException

标签:
Java SSM

异常信息

org.apache.ibatis.binding.BindingException

nested exception is org.apache.ibatis.binding.BindingException: Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2]

场景回溯

业务场景:车辆表,需要更新指定编号车辆的设备Id(编号和设备ID均非主键),因而在对应的mapper.xml中自定义了SQL语句,结果调用对应接口时爆出异常

当然可以直接使用Mybatis-plus的EntityWrapper,这样做虽然方便,但是第一影响性能,第二造成职责划分不清(SQL的拼装属于dao层,它从来就不该在Service层完成)

原因排查

apache的ibatis将原因说的很清楚:Parameter ‘deviceNO’ not found. Available parameters are [deviceNo, deviceId, param1, param2] ,没找到xml里使用占位符表示的参数(#{deviceNO}),能用的参数有deviceNo、deviceId等,很明显是发生了拼写错误

xml:

Mapper接口:

是一个字母的大小写引发的错误

解决方法

更改参数名使xml和Mapper接口里一致即可

总结与反思

一个字母的大小写错误,不仅仅是引发了BindingException异常,而且它还暴露了我极大的缺点:

  1. 命名不规范,Id还是ID,No还是NO,至今我还没弄明白到底该选择哪种命名
  2. 简单CV工程师:xml文件为了减少错误,直接从已有的SQL语句粘贴而来(NO),可是Mapper接口我却选择自己去写,采取了我的命名习惯(No)

一定要注意class与yml、xml之间的拼写错误!

技术不分领域,思想一脉相承,欢迎访问橙味菌的博客
本文由博客一文多发平台 OpenWrite 发布!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
0
获赞与收藏
3

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消