您的位置:首页 > 大数据 > 人工智能

(三)MyBatis学习之多个报错Parameter 'xxxx' not found. Available parameters are [arg1, arg0, param1, param2]

2018-01-31 14:49 2371 查看
在myBatis中,如果SQL语句需要两条或两条以上数据时,如果按如下写法可能会出现Parameter ‘xxxx’ not found. Available parameters are [arg1, arg0, param1, param2]的错误:

注解开发中错误的写法

@Select("select * from emp_table where  userId=#{usereId} and user_name =#{userName}
List<Employee> selectEmployee(Integer userId,String userName);


正确写法

@Select("select * from emp_table where  userId=#{usereId} and user_name =#{userName}
List<Employee> selectEmployee(@Param("userId") Integer userId,@Param("userName") String userName);


配置开发中错误的写法

<update id="updateById">
update emp_table set user_name=#{userName} where user_id =#{userId}
</update>


正确的写法

<update id="updateById">
update emp_table set user_name=#{0} where user_id =#{1}
</update>


*如#{0},#{1}依然报错,请更改成#{arg0},#{arg1},也可以在mapper类中加@Param()

原因:在myBatis中SQL语句需要多个参数时会做特殊处理,多个参数会被封装成一个map,#{}就是从map中获取指定key的值(key:param1…paramN,value:传入的参数值),不能使用#{参数名称}进行参数的接收,所以要写成#{param1},#{param2}或者#{0},#{1}(mybatis3.4.2之前的版本,之后的版本用#{arg0},#{arg1}),也可以使用命名参数,明确指定封装参数时map的key,即在mapper类中使用@Param()注解。

POJO:如果多个参数正好是业务逻辑的数据模型,我们就可以直接传入pojo,即:#{属性名}

Map:如果多个参数不是业务模型中的数据,没有pojo,为了方便,也可以传入map,即:#{key}

To:如果多个蚕食不是业务模型中的数据,但是经常要使用,推荐编写一个Transfer Object,传输数据对象,例:

Page{
int index;
int size;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐