千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:沈阳千锋IT培训  >  技术干货  >  记Mybatis之BindingException的产生及解决过程

记Mybatis之BindingException的产生及解决过程

来源:千锋教育
发布人:lx
时间: 2023-03-24 13:34:21

  一. 业务场景

  前几天老师带学生做一个小案例,需要更新数据库中的车辆信息表,根据指定车辆的设备id(编号和设备ID均非主键)来更新车辆信息。老师要求学生们用Mybatis进行实现,所以是在对应的mapper.xml中自定义了SQL语句。结果有个学生在调用对应接口时爆出了一个异常,但他不知道这个异常该怎么解决,于是就跑来问老师。其实我们在学习的时候,有很多初学者都会出现一些令人头疼的问题,遇到了问题不要怕,我们解决了就好啦。

Mybatis之BindingException的产生及解决过程

  所以接下来老师就以Mybatis中的这个常见异常为例,来带着大家分析Mybatis开发过程中出现异常之后该如何快速解决,这样以后再遇到类似的问题时,大家就知道该怎么解决问题了。

  老师提醒,不要让同一个问题困扰你两次哦!

  二. 异常信息

  我们先来看看这个异常是什么。

  org.apache.ibatis.binding.BindingException

  nested exception is org.apache.ibatis.binding.BindingException:Parameter 'carNo' not found. Available parameters are [cardNo, devId, param1, param2]

  很多同学在使用Mybatis时,可能都遇到过上面的这个异常。有些同学一看到密密麻麻的英文单词,几乎都不认识,脑袋嗡一下子就炸了,到底哪里出错了,出了什么错,啥也不知道,反正就知道报错了,一下子就不知所措了。

  老师在这里告诉大家,遇到问题千万不要紧张。如果你的单词量不行,可以使用有道翻译对照查看错误,慢慢积累单词就记住了,其实Java里的常用单词就那么几个,天天看起码知道啥意思,我们也不需要你背写单词对吧。

  上面的异常,咱们根据字面意思来理解就是产生了绑定异常,而后面的详细描述是说参数 carNo找不到.......既然已经知道了这个错误,那就继续往下看分析吧!

  三. Mybatis使用须知

  在解决异常之前,老师先来带各位复习一下Mybatis的使用须知。Mybatis使用说明:

  1).首先定义的接口方法名要和XxxMapper.xml文件中的id保持一致;

  2).建议接口名和mapper映射文件名称一致;

  3).mapper映射文件中的namesapce必须是接口的全限定名称;

  4).建议接口文件和mapper映射文件的目录结构一致;

  5).接口中如果用了参数绑定@Param,需要查看映射文件的占位符内容是否和它一致。

  四. 原因排查

  复习了上面的Mybatis使用须知,你现在是否已经知道上面的异常是怎么产生的了?其实控制台里的信息已经把异常原因说的很清楚了:

  Parameter 'carNO' not found. Available parameters are [carNo, devId, param1, param2] ,

  这里表示没找有到XML中使用占位符表示的参数 #{carNO},能用的参数有carNo、devId等,这里明显就是发生了拼写错误。我们仔细检查核对一下MyBatis中的XML文件。

  update car set devId = #{devId} where car_no = #{carNO}

  然后我们再来看看对应的Mapper接口代码:

  int updateDevIdByCarNo(@Param("devId") String devId,@Param("carNo")String carNo);

  注意看,这里参数绑定里面No的o是小写字幕,就是这样一个很小的细节,因为学生的粗心导致了上面的绑定错误!

  也就是说,上面的异常是由一个字母的大小写不匹配而引发的错误!是不是太不应该出现这种错误了呢?其实很多人在学习编程时所犯的错误,绝大多数都是因为马虎造成的!

  五. 解决办法

  其实解决办法很简单,只需要将XML文件中的参数名和Mapper接口里的参数名保持一致即可!

  六. 总结与反思

  本案例中的异常,是因一个字母的大小写不匹配而导致的错误,这不仅仅引发了BindingException异常,同时还暴露了我们学习时存在的极大缺点:

  1).代码命名不规范,Id还是ID,No还是NO,在项目中要保持统一的风格;

  2).合理CV:为了减少xml文件中出现不必要的错误,可以直接从已有的SQL语句中把参数粘贴过来(NO);

  3).一定要注意接口与xml文件之间的拼写一致性!

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

为什么会出现ref?

2023-05-05

防抖和节流是什么?

2023-04-27

JS的原型与原型链是什么?

2023-04-20

最新文章NEW

什么是redux?

2023-05-05

vue的计算属性,特性,应用是什么?

2023-04-27

负载均衡原理是什么?

2023-04-25

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>