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接收。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM