当前位置:   article > 正文

maybatis MapperMethod(接口类型方法参数转换)_mappermethod.parammap

mappermethod.parammap
public static class MethodSignature {


    private final boolean returnsMany;
    private final boolean returnsMap;
    private final boolean returnsVoid;
    private final Class<?> returnType;
    private final String mapKey;
    private final Integer resultHandlerIndex;
    private final Integer rowBoundsIndex;
    private final SortedMap<Integer, String> params;
    private final boolean hasNamedParameters;


    public MethodSignature(Configuration configuration, Method method) {
      this.returnType = method.getReturnType();
      this.returnsVoid = void.class.equals(this.returnType);
      this.returnsMany = (configuration.getObjectFactory().isCollection(this.returnType) || this.returnType.isArray());
      this.mapKey = getMapKey(method);
      this.returnsMap = (this.mapKey != null);
      this.hasNamedParameters = hasNamedParams(method);//如果方法中有一个@Param();就返回true
      this.rowBoundsIndex = getUniqueParamIndex(method, RowBounds.class);
      this.resultHandlerIndex = getUniqueParamIndex(method, ResultHandler.class);
      this.params = Collections.unmodifiableSortedMap(getParams(method, this.hasNamedParameters));
      //得到 方法中的形参组成的map; 有如果hasNamedParameters为true,那么对全部都按照 true的逻辑去处理Map
     //,但是如果真的找到了@Param(”name“);  这个map的key为参数的下标(0、1....),value为 "name";
      //找不到的话 value等于key;举例:
      //ps:List User select(@Param('sex') String sex,Integer age)  这个map就为:
        //{
        //  0:"sex",
        //  1:1
         //}
    }


    public Object convertArgsToSqlCommandParam(Object[] args) {
    //一下三种情况:
    //1.入参为null或没有时,参数转换为null
    //2.没有使用@Param 注解并且只有一个参数时,返回这一个参数
    //3.使用了@Param 注解或有多个参数时,将参数转换为Map1类型,并且还根据参数顺序存储了key为param1,param2的参数。
      final int paramCount = params.size();
      if (args == null || paramCount == 0) {
        return null;
      } else if (!hasNamedParameters && paramCount == 1) {
        return args[params.keySet().iterator().next().intValue()];
      } else {
        final Map<String, Object> param = new ParamMap<Object>();
        int i = 0;
        for (Map.Entry<Integer, String> entry : params.entrySet()) {
          param.put(entry.getValue(), args[entry.getKey().intValue()]);
          // issue #71, add param names as param1, param2...but ensure backward compatibility
          final String genericParamName = "param" + String.valueOf(i + 1);
          if (!param.containsKey(genericParamName)) {
            param.put(genericParamName, args[entry.getKey()]);
          }
          i++;
        }
        return param;
      }
    }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/870459
推荐阅读
相关标签
  

闽ICP备14008679号