Mybatis传入多个参数报错(组合查询)----解决方法

一、问题引入:

1、我要实现 姓名,年龄段的组合查询功能

【报错】

Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘name’ not found. Available parameters are [arg2, arg1, arg0, param3, param1, param2]

我写的具体代码如下:

1、StudentMapper类:传入 名字,年龄1,年龄2 三个参数

List getUserByNameAndAge(String name, Integer age1, Integer age2);

2、StudentMapper.xml类:

 

3、报的错误如图所示:
Mybatis传入多个参数报错(组合查询)----解决方法_第1张图片

二、解决的办法

(作者:炫封 原文:https://blog.csdn.net/weixin_37891479/article/details/80525612 )

产生的原因:
当传入多个参数时,映射文件无法获得传入的参数

AParameter ‘name’ not found. Available parameters are [arg2, arg1, arg0, param3, param1, param2]
这句话的意思就是id找不到,可用的参数是[arg2, arg1, arg0, param3, param1, param2]。
所以可使用参数出现的顺序号码来引用参数,第一个参数用arg0或param1表示,第二个参数用arg1或param2表示,

方法1,利用参数出现的顺序:

StudentMapper不变, 只修改StudentMapper.xml文件,注意,将name改成arg0,age1改成arg1,age2改成arg2


方法2,使用注解

StudentMapper.xml文件不变,修改StudentMapper

List getUserByNameAndAge(@Param("name") String name, @Param("age1") Integer age1, @Param("age2") Integer age2);

方法3,把接口的形参改为Map

StudentMapper.xml文件不变,修改StudentMapper, UserServiceImpl

//StudentMapper接口:
List getUserByNameAndAge(Map params);
//UserServiceImpl:
Map params = new HashMap();
params.put("name", name);
params.put("age", age1);
params.put("age", age2);
List list = studentMapper.getUserByNameAndAge(params);

你可能感兴趣的:(后台)