Parameter 'userid'를 찾을 수 없는 해결 방법에 대해 사용 가능한 매개변수는 mybatis의 [arg1, arg0, param1, param2]입니다.

1. 비정상적인 내용

다음과 같은 매핑 방법:

    @Insert("insert into user_role(userId,roleId) values(#{userId},#{id})")
    void saveUserWithRole( String userId,  String id) throws MyException;

발생하는 예외:

Caused by: org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]
	at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:202)
	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.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:79)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:93)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.parameterize(RoutingStatementHandler.java:64)
	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
	at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49)
	at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
	at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
	at com.sun.proxy.$Proxy121.update(Unknown Source)

둘, 해결책

이는 in, out 파라미터가 많고 sql 문에서 파라미터 가져오기 결과가 userId.userId, userId.roleId 이기 때문에 sql 문에서 도입한 파라미터가 해당 메소드에서 어떤 파라미터에 해당하는지 정의해야 한다. 다음과 같이 수정합니다.

	//用mybatis提供的@Param注解,定义sql语句中的对应参数
    @Insert("insert into user_role(userId,roleId) values(#{userId},#{otherroleId})")
    void saveUserWithRole( @Param("userId")String userId,  @Param("otherroleId")String id) throws MyException;

추천

출처blog.csdn.net/weixin_42717117/article/details/119672081