zoukankan      html  css  js  c++  java
  • 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接收。

  • 相关阅读:
    VirtualBox Win7 虚拟机 共享文件夹设置
    图像的 SNR 和 PSNR 的计算
    swprintf %s %ws %S 的区别
    解决 Virtual Box 启动 Cannot load R0 module supLoadModule returned VERR_LDR_MISMATCH_NATIVE Failed to register ourselves as a PCI Bus (VERR_MODULE_NOT_FOUND)
    VS2015/2013/2012 IIS Express Debug Classic ASP
    Beginning Android 4 中 Demo Basic/Switch 的问题.
    【虚拟机】解决网络适配器没有 VirtualBox Host-Only Ethernet Adapter 问题
    Docker安装Tomcat镜像并部署web项目
    Docker——入门实战
    Centos7上安装docker
  • 原文地址:https://www.cnblogs.com/chanedi/p/3811643.html
Copyright © 2011-2022 走看看