起因

今天写了一个判断用户用户名密码是否正确的登录功能,在单元测试的时候发现报错,(org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘user_name’ not found. Available parameters are [arg1, arg0, param1, param2])

img

原因是没有找到参数user_name的值,可是我明明在mapper.xml文件中传入了呀。

1
2
3
4
5
6
7
8
9
10
<mapper namespace="com.xueziport.dao.UserDao">
<!--根据id查询用户信息 -->
<select id="findUserById" parameterType="Integer" resultType="User">
select * from user where user_id=#{user_id}
</select>
<!-- 根据账号密码查找用户-->
<select id="findUser" parameterType="String" resultType="User">
select * from user where user_name=#{user_name} and user_password=#{user_password}
</select>
</mapper>

后来查了资料才发现,如果需要传入多个参数需要在接口中加上@Param(values=”参数名”)参数(如果只有一个values参数则可以省略),告诉mybatis你传入的值的参数名称,这样好在mapper文件中调用。

1
public User findUser(@Param("user_name") String user_name,@Param("user_password") String user_password);

img

最后发现就可以了

总结:

在mapper.xml中只有一个传入参数,可以不用@param;

如果传入多个的参数,需要使用@Paran注解;

如果是传入Map的集合,那么key就对应着参数的别名,可以不用加@param。