文章目录

  • 前言
  • 一、报错
  • 二、分析
  • 三、解决办法
  • 四、知识点补充——MyBatis框架中参数获取的语法
    • 1. 只有一个参数
    • 2. 两个参数及以上
  • 总结

前言

这是自己在学MyBatis框架,做一个根据条件查询学生信息实现分页的demo时遇到的bug。


一、报错

###Error querying database.
Cause: org.apache.ibatis.binding.BindingException: Parameter ‘name’ not found. Available parameters are [student, page, param1, param2]

报错内容说无法获取名为’name’的元素,可获取的元素是[student, page, param1, param2]

二、分析

报错提示很明显,就是你不能获取到’name’这个元素,你可以获取到的元素只有[student, page, param1, param2]。
接口代码:

// 根据条件查询学生的信息,实现分页
List<Student> selectPage(@Param("student") Student student, @Param("page") PageUtil page);

正确的映射代码:

<select id="selectPage" resultMap="baseMap">select <include refid="Base_Column_List"></include> from student<where><if test="student.name != null">name like "%"#{student.name}"%"</if><if test="student.sex != null">and sex = #{student.sex}</if><if test="student.birthday != null">and birthday = #{student.birthday}</if><if test="student.age != null and student.age > 0">and age = #{student.age}</if><if test="student.classid != null and student.classid > 0">and classid = #{student.classid}</if></where>limit #{page.start}, #{page.end}
</select>

开始时我有两处错误,一处是test里面的属性获取错了,比如: test="student.name != null" 但我开始写的是 test="name != null";而且我的ognl表达式也获取错了,比如 name like "%"#{student.name}"%" 但我开始写的是 name like "%"#{name}"%"。第二个错误是比较容易找到的,因为自己为参数添加了@param标签,所以在获取参数时,应该通过@param标签里的key值,来调用对象的属性的方式来获取到某个属性,就像这样 #{student.name}

但解决了第二个错误后,仍然报这个错误,开始还没有意识到自己犯了两处错误。这就导致我怀疑自己的修改是否是正确的。这也导致我让第一个错误困扰了我好长时间,主要原因是刚学习这块知识,对语法什么的都不太熟练。

那我是怎么分析解决的呢?首先,根据报错,它告诉我找不到name属性,那我就要明确到底哪里用到了name属性,一共有三处,test里面一处,like前面一处,like后面一处。然后我开始分析这三处name各起什么作用。like前面的name是数据库字段,like后面的name是获取到的Java参数,而且用到了@param标签,证明自己的修改是正确的。接下来就将焦点移动到了test里面的name。我突然意识到test里面的name属性也是参数,是对参数要做的判断,这使我豁然开朗。但标签元素里的参数不需要用ognl表达式,所以直接用key调用属性即可。

就是这样一个小错误困扰了自己一下午。但最重要的我想不是为这个bug耗费了很多无效的时间然后把这个bug给解决了,而是遇到问题后,分析问题解决问题的能力才是自己最大的收获。

三、解决办法

以后遇到什么参数无法获取,可获取的参数是什么什么的报错的时候。首先要分析:
①哪里用到了这个参数
②这个参数在程序中到底起的是什么作用
③相关的语法是什么
明确这三个问题后,都排查过后,相信bug也应该解决了。

四、知识点补充——MyBatis框架中参数获取的语法

1. 只有一个参数

  1. 如果是 基本数据类型其封装类型String类型
    默认可直接通过参数名直接获取
  2. 如果是对象
    默认可直接通过属性名来获取

2. 两个参数及以上

  1. 必须使用@param(“key”)注解里的key来获取。如果是对象,通过key.属性名来获取对应的属性。
  2. 当然一个参数的情况下,也是可以使用@param()注解的。

总结

以上就是自己对于参数无法获取这个bug的参数总结,通过学习让自己明确了如何分析解决这类参数没有获取到的bug,以及加深了对获取参数的语法的理解。

org.apache.ibatis.binding.BindingException: Parameter ‘name‘ not found.相关推荐

  1. org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters

    错误信息: ### Error updating database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'use ...

  2. Mybatis报错:nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found

    问题 使用Mybatis过程中报错 nested exception is org.apache.ibatis.binding.BindingException: Parameter 'XXX' no ...

  3. org.apache.ibatis.binding.BindingException: Parameter '1' not found. Available parameters are [arg3,

    报错信息如下: org.apache.ibatis.binding.BindingException: Parameter '1' not found. Available parameters ar ...

  4. nested exception is org.apache.ibatis.binding.BindingException: Parameter 'xxxx'解决方案

    最近写一个ssm项目,遇到了一个没遇到过的问题: nested exception is org.apache.ibatis.binding.BindingException: Parameter ' ...

  5. nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘email‘ not found. Availab

    在写筛选查询时,参数为对象,显示此参数找不到,报这个错误,几经研究查询 ERROR o.jeecg.common.exception.JeecgBootExceptionHandler:79 - ne ...

  6. Caused by: org.apache.ibatis.binding.BindingException: Parameter ‘memberId‘ not found. Available par

    前言 更新时报错 错误信息如下 Caused by: org.apache.ibatis.binding.BindingException: Parameter 'memberId' not foun ...

  7. nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘xxx‘ not found错误的详细解决方法

    文章目录 1. 复现错误 2. 分析错误 3. 解决错误 4. 文末补充 1. 复现错误 今天写好导入hive表的回调接口,如下代码所示: /*** hive表导入的回调接口** @author su ...

  8. org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [id

    ibatis 无效绑定异常. 我们知道 MyBatis 源自于 ibatis,在流行的 SSM 框架中,Mybatis 常被用于持久化层,说白了,就是保存数据,负责将数据持久化(插入)到数据库.在常见 ...

  9. 错误nested exception is org.apache.ibatis.binding.BindingException

    错误 错误:nested exception is org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Av ...

最新文章

  1. html产品列表页的设计,产品列表页.html
  2. Python中time模块详解
  3. STM8控制4位LED数码管显示数字
  4. linux进程间通信-管道
  5. JDBC(二)驱动程序类型发展历程
  6. 【ArcGIS风暴】水文分析模块实验:山脊线和山谷线提取
  7. mysql update修改数据_MySQL UPDATE:修改数据(更新数据)
  8. 我一直在想500年前我是不是孙悟空,但是事实上我却是至尊宝。这就是宿命(capsicum.heorhome.net)
  9. 现代ups电源及电路图集_2020山特UPS电源自动开机200KVA实力
  10. WEB前端开发规范文档+CSS命名规范
  11. Python中list.pop()的使用
  12. 二级计算机混合引用,Excel单元格的相对引用、绝对引用和混合引用
  13. 大使馆大师傅活动分工和非都市规划
  14. Java使用itext 生成PDF,以生成个人简历为例
  15. Windows 罕见技巧全集3
  16. 解决Win10系统桌面图标异常问题(恢复步骤)
  17. Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
  18. WPF将点列连接成光滑曲线——贝塞尔曲线
  19. 导入excel,excel中带有图片,记录一下
  20. mumu按键精灵_什么安卓模拟器可实现操作录制?MuMu模拟器成为你的按键精灵_MuMu安卓模拟器/MuMu手游助手...

热门文章

  1. wsl Hyper-V 与 安卓模拟器虚拟机同时共存方案
  2. 使用IDEA连接mysql
  3. JAVA必备—java流,考验你的想象力
  4. 【天光学术】英语论文:跨文化交际背景下英汉语模糊数字使用对比(节选)
  5. jiffies 时间转换
  6. 浅析SkeyeVSS卡口智能可视化管理系统解决方案技术应用
  7. 小偷模拟器 Thief Simulator V20230207 最新中文学习版 单机游戏游戏下载免安装【3.27G】
  8. 扒一扒国内外最火开发语言“上位”史!升职加薪很靠谱!
  9. unbound支持ecs版本安装,配置
  10. Mybatis3快速上手(详细)