在mybatis中@Param注解的作用是为参数指定一个名称,在mapper文件中使用,而不是使用mybatis的arguments[0,1…]代替。但是在非动态的mapper——mybatis根据mapper接口创建实现类,@param注解是不起作用的。
阅读mybatis的源码得知,检查@param注解的方法:
private booleanhasNamedParams(Method method) {boolean hasNamedParams = false;final Object[][] paramAnnos =method.getParameterAnnotations();for(Object[] paramAnno : paramAnnos) {for(Object aParamAnno : paramAnno) {if (aParamAnno instanceofParam) {
hasNamedParams= true;break;
}
}
}returnhasNamedParams;
}
View Code
此方法位于 org.apache.ibatis.binding.MapperMethod 的内部类 MethodSignature 中。根据源码一步一步的递归:MethodSignature的构造方法——>MapperMethod的构造方法——>MapperProxy的cachedMapperMethod 和invoke方法 ——> MapperProxyFactory中的 newInstance 方法。
@SuppressWarnings(