亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mybatis的ParamNameResolver參數(shù)名稱解析

 更新時間:2023年08月28日 09:50:46   作者:codecraft  
這篇文章主要為大家介紹了mybatis的ParamNameResolver參數(shù)名稱解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

在mybatis的interceptor獲取MapperMethod.ParamMap這種參數(shù)類型時,經(jīng)常會多出param1,param2,collection,list,array這些參數(shù),這些不是接口自己定義的,而是ParamNameResolver自動添加的

ParamNameResolver

org/apache/ibatis/reflection/ParamNameResolver.java

public class ParamNameResolver {
  public static final String GENERIC_NAME_PREFIX = "param";
  /**
   * <p>
   * A single non-special parameter is returned without a name.
   * Multiple parameters are named using the naming rule.
   * In addition to the default names, this method also adds the generic names (param1, param2,
   * ...).
   * </p>
   *
   * @param args
   *          the args
   * @return the named params
   */
  public Object getNamedParams(Object[] args) {
    final int paramCount = names.size();
    if (args == null || paramCount == 0) {
      return null;
    } else if (!hasParamAnnotation && paramCount == 1) {
      Object value = args[names.firstKey()];
      return wrapToMapIfCollection(value, useActualParamName ? names.get(0) : null);
    } else {
      final Map<String, Object> param = new ParamMap<>();
      int i = 0;
      for (Map.Entry<Integer, String> entry : names.entrySet()) {
        param.put(entry.getValue(), args[entry.getKey()]);
        // add generic param names (param1, param2, ...)
        final String genericParamName = GENERIC_NAME_PREFIX + (i + 1);
        // ensure not to overwrite parameter named with @Param
        if (!names.containsValue(genericParamName)) {
          param.put(genericParamName, args[entry.getKey()]);
        }
        i++;
      }
      return param;
    }
  }
  //......
}

getNamedParams方法針對單個參數(shù)沒有加@Param的場景會調(diào)用wrapToMapIfCollection,其他的則使用param1,param2這種,這里用了contains,也就是如果本身命名就有包含param1,param2這種則不會添加

wrapToMapIfCollection

org/apache/ibatis/reflection/ParamNameResolver.java

/**
   * Wrap to a {@link ParamMap} if object is {@link Collection} or array.
   *
   * @param object a parameter object
   * @param actualParamName an actual parameter name
   *                        (If specify a name, set an object to {@link ParamMap} with specified name)
   * @return a {@link ParamMap}
   * @since 3.5.5
   */
  public static Object wrapToMapIfCollection(Object object, String actualParamName) {
    if (object instanceof Collection) {
      ParamMap<Object> map = new ParamMap<>();
      map.put("collection", object);
      if (object instanceof List) {
        map.put("list", object);
      }
      Optional.ofNullable(actualParamName).ifPresent(name -> map.put(name, object));
      return map;
    } else if (object != null && object.getClass().isArray()) {
      ParamMap<Object> map = new ParamMap<>();
      map.put("array", object);
      Optional.ofNullable(actualParamName).ifPresent(name -> map.put(name, object));
      return map;
    }
    return object;
  }

wrapToMapIfCollection對于collection類型添加collection,對于list類型還會添加list參數(shù),如果是array類型則會添加array參數(shù),不過這里使用了ifPresent,也就是如果本身參數(shù)名包含了則不會添加

小結

mybatis的ParamNameResolver針對單個參數(shù)沒有加@Param的場景會調(diào)用wrapToMapIfCollection,最多會添加collection、list、array這些參數(shù);其他的則多添加param1,param2這類參數(shù)。

以上就是mybatis的ParamNameResolver參數(shù)名稱解析的詳細內(nèi)容,更多關于mybatis ParamNameResolver的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:

相關文章

  • 使用JPA中@Query 注解實現(xiàn)update 操作方法(必看)

    使用JPA中@Query 注解實現(xiàn)update 操作方法(必看)

    下面小編就為大家?guī)硪黄褂肑PA中@Query 注解實現(xiàn)update 操作方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • java中對象為null時的打印輸出方式

    java中對象為null時的打印輸出方式

    這篇文章主要介紹了java中對象為null時的打印輸出方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Jeecg-Boot異常處理'jeecg-boot.QRTZ_LOCKS'?doesn't?exist問題

    Jeecg-Boot異常處理'jeecg-boot.QRTZ_LOCKS'?doesn'

    這篇文章主要介紹了Jeecg-Boot異常處理'jeecg-boot.QRTZ_LOCKS'?doesn't?exist問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring?Lifecycle?和?SmartLifecycle區(qū)別面試精講

    Spring?Lifecycle?和?SmartLifecycle區(qū)別面試精講

    這篇文章主要為大家介紹了Spring?Lifecycle和SmartLifecycle的區(qū)別面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Java中LinkedList數(shù)據(jù)結構的詳細介紹

    Java中LinkedList數(shù)據(jù)結構的詳細介紹

    這篇文章主要介紹了Java中LinkedList,Linked List 是 java.util 包中 Collection 框架的一部分,文中提供了詳細的代碼說明,需要的朋友可以參考下
    2023-05-05
  • 深入理解JVM自動內(nèi)存管理

    深入理解JVM自動內(nèi)存管理

    對于Java虛擬機在內(nèi)存分配與回收的學習,本文主要介紹了JVM自動內(nèi)存管理,文中通過圖文示例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • JAVA正則表達式的基本使用教程

    JAVA正則表達式的基本使用教程

    這篇文章主要給大家介紹了關于JAVA正則表達式的基本使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • JVM執(zhí)行引擎和垃圾回收要點總結

    JVM執(zhí)行引擎和垃圾回收要點總結

    不論是在問題現(xiàn)場還是跳槽面試,我們面對JVM性能問題,依舊會束手無辭,它需要你對Java虛擬機的實現(xiàn)和優(yōu)化,有極為深刻的理解。所以我在這里整理了一下 JVM的知識點。今天說說虛擬機執(zhí)行引擎和垃圾回收,都是十足的干貨,請各位看官耐心批閱!
    2021-06-06
  • mybatis plus saveBatch方法方法執(zhí)行慢導致接口發(fā)送慢解決分析

    mybatis plus saveBatch方法方法執(zhí)行慢導致接口發(fā)送慢解決分析

    這篇文章主要為大家介紹了mybatis plus saveBatch方法導致接口發(fā)送慢解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • JDK8中String的intern()方法實例詳細解讀

    JDK8中String的intern()方法實例詳細解讀

    String字符串在我們?nèi)粘i_發(fā)中最常用的,當然還有他的兩個兄弟StringBuilder和StringBuilder,接下來通過本文給大家介紹JDK8中String的intern()方法詳細解讀,需要的朋友可以參考下
    2022-09-09

最新評論