常见错误: org.apache.ibatis.binding.BindingException: Parameter 'username' not found

1,562 阅读1分钟

报错:org.apache.ibatis.binding.BindingException: Parameter 'username' not found

//报错详情:
26-May-2022 17:24:27.324 严重 [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke 在路径为/exercise1的上下文中,Servlet[DispatcherServlet]Servlet.service()引发了具有根本原因的异常Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [arg1, arg0, param1, param2]
	org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [arg1, arg0, param1, param2]
		at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212)
		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:219)
		at org.apache.ibatis.executor.CachingExecutor.createCacheKey(CachingExecutor.java:146)
		at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:88)
		at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
		at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
		at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
		at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76)

报错原因:Mybatis并没有匹配到这个参数

解决方案:在dao接口对应的方法中,使用@Param注解来指定参数名称

原因:当大于一个参数时,dao接口的方法中需要使用注解@Param(“XXX”)为Mybatis指定参数名称。

//Dao层对应的方法
User login(@Param("username")String username,@Param("password")String password);

//sqlMapper.xml文件对应的sql语句
<select id="login" resultType="User">
    select id,username,email,phoneNum,password
    from sys_user
    where id = #{username} and password = #{password}
</select>