版权声明:本文为博主柒晓白(邹涛)原创文章,未经博主允许不得转载,否则追究法律责任。 https://blog.csdn.net/ITBigGod/article/details/82705287 </div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
<div id="content_views" class="markdown_views cye-lm-tag">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h2 id="报错parameter-xxxx-not-found-available-parameters-are-0-1-param1-param2" class="cye-lm-tag"><a name="t0"></a>报错Parameter ‘xxxx’ not found. Available parameters are [0, 1, param1, param2…</h2>
1.报错信息
今天使用mybatis查询数据的时候,出现org.apache.ibatis.binding.BindingException: Parameter ‘username’ not found. Available parameters are [0, 1, param1, param2] 问题。
报错信息:
![这里写图片描述](https://img-blog.csdn.net/20180914162512829?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0lUQmlnR29k/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
文字:
org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [0, 1, param1, param2]
at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:168)
at org.apache.ibatis.reflection.wrapper.MapWrapper.get(MapWrapper.java:45)
at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:122)
at org.apache.ibatis.executor.BaseExecutor.createCacheKey(BaseExecutor.java:212)
at org.apache.ibatis.executor.CachingExecutor.createCacheKey(CachingExecutor.java:139)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.产生原因
字面上,就是说Mybatis并没有匹配到这个参数。
3.解决方案
使用注解@Param(“XXX”)来完成。
1.当只有一个参数时,Mapper/Dao层中的方法是可以不使用注解的。
比如插入数据的时候:
public void insertAdmin(String username);
2.多个参数时必须用@Param(“XXX”)来指明:
比如登录验证的时候:
public void insertAdmin(@Param("username")String username,@Param("password")String password);
此时在运行就不会再报错了。
4.总结
在dao接口方法中的参数前面加@param注解情景:
当只有一个参数时,dao接口的方法中可不用添加注解。Mybatis可成功匹配参数。
当大于一个参数时,dao接口的方法中需要使用注解@Param(“XXX”)为Mybatis指定参数名称。