异常记录——使用Mybatis报BindingException

异常信息

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 发布!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先创建服务端的APP 1.官网下载Winrun4j。http://winrun4j.sourceforge.net...
    Alex_1799阅读 5,920评论 1 2
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,165评论 0 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,855评论 0 9
  • 1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只...
    月哥说了算阅读 3,214评论 0 0
  • 倒春寒来了,保暖内衣又重新穿上了身,街上还能偶遇羽绒服。真冷! 早起,去停车场,竟然小跑了起来。为啥?冷嘛!小跑御...
    天福悟道阅读 3,858评论 5 6