近些天在写以javaweb为基础的员工管理系统,使用了Mybatis,在写增删改查中的查询功能,多条件查询是碰到了这个bug:
Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]
示例图:
多条件查询时,输入条件没有内容渲染到页面中
idea后台报错误
mapper代码
List<Emp> searchDeptName(String name,String dept);
xml文件中的代码
<select id="searchDeptName" resultType="eims.pojo.Emp" resultMap="EmpResultMap">
select * from emp where name like concat('%',#{name},'%') and deptno like concat('%',#{dept},'%')
</select>
解决方法
刚开始不知道是什么错误,查看了好几遍代码,发现跟单个查询的代码没有差别,但是多条件查询后台就会报这个错误,通过在csdn上的搜索找到了两种解决办法 (任选其一就可以)
1. 更改mapper中的代码,采用注解的方法
List<Emp> searchDeptName(@Param("name") String name,@Param("dept") String dept);
2. 更改xml里的代码
<select id="searchDeptName" resultType="eims.pojo.Emp" resultMap="EmpResultMap">
select * from emp where name like concat('%',#{arg0},'%') and deptno like concat('%',#{arg1},'%')
</select>
效果
以上两种解决方法都可以解决该问题,上图就是修改后我的搜索结果
出现错误的原因
原因我自己并不是很清楚,只能从大家的文章中总结:
传入的参数超过一个
这里有必要说一下mybatis处理传入值的机制:mybatis可以接收的类型有两种[基本类型、复杂类型]
(1)基本数据类型(如int,String,…基本数据类型作为参数只能传入一个),比如当使用了String类型作为传入参数,又用了#{name}而不是#{0}…时就会出错。
(2)复杂类型(实体类[Pojo类型]、map),复杂类型通过#{属性名}或者#{key}获得参数值。传入多个值时,mybatis会自动将它们转换成类似map类型的值,key为0,1,2,……
如果有大神也出现过此类问题,可以在评论区解说一下出现此类问题的原因,我还不是很明白问什么😢😢