• mybatis源码追踪1——Mapper方法用法解析


    Mapper中的方法执行时会构造为org.apache.ibatis.binding.MapperMethod$MethodSignature对象,从该类源码中可以了解如何使用Mapper方法。

    【支持的特殊参数类型】

    RowBounds、ResultHandler、普通参数 (作为sql执行时使用的变量)

    其中普通参数可以是单一的model、查询条件的map或直接将一到多个查询条件作为参数(多个条件在框架中最终将封装为Map<String, Object>使用)

    另外普通参数支持添加@Param注解以修改参数名,如不修改则参数名用0、1、2来表示。

    使用时,如参数有多个则只能使用0和param1这两种形式。(如:SELECT * FROM TABLE WHERE COLUMN=#{0})

    相关源码: 

        public Object convertArgsToSqlCommandParam(Object[] args) {
          final int paramCount = params.size();
          if (args == null || paramCount == 0) {
            return null;
          } else if (!hasNamedParameters && paramCount == 1) {
            return args[params.keySet().iterator().next()];
          } 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()]);
              // 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;
          }
        }

    【支持的返回类型】

    Model类型、void、集合、数组皆可

    需注意的是如果返回类型为map则需添加注解@MapKey(不加MethodSignature类中returnsMap属性会被设为false,其他后果未验证)

    【在SelectProvider中修改参数】

    Mybatis框架进入SelectProvider在前述convertArgsToSqlCommandParam方法之后,最终执行sql之前,因此可以在此处对最终执行sql的参数进行修改(前提是不能修改参数引用)。如使用参数Map<String, Object>的形式,就更可以灵活地进行修改。

    注:多个参数必须使用Map接收,单个参数可以使用原有类型接收也可以使用Map接收。

  • 相关阅读:
    day07_final
    day06_final
    day02_final
    day04_final
    New
    AtCoder Grand Contest 015 E Mr.Aoki Incubator
    长链剖分学习笔记
    关于某些莫队的优化
    CodePlus 2019 3月月赛 Div.1 A题 TREE
    边分治学习笔记
  • 原文地址:https://www.cnblogs.com/chanedi/p/3811643.html
Copyright © 2020-2023  润新知