• MyBatis 参数传递


    MyBatis接口方法中可以接收各种各样的参数,MyBatis底层对于这些参数进行不同的封装处理方式

    1.单个参数

    POJO类型:直接使用,属性名和参数占位符名称一致

    ② Map集合:直接使用,键名和参数占位符名称一致

    ③ Collection:封装为map集合,可以使用@Param注解,替换Map集合中默认的arg键名

    map.put(“arg0”,collection集合)
    map.put(“collection”,collection集合)

    ④ List:封装为map集合,可以使用@Param注解,替换Map集合中默认的arg键名

    map.put(“arg0”,list集合)
    map.put(“collection”,list集合)
    map.put(“list”,list集合)

    ⑤ Array:封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg键名

    map.put(“arg0”,数组)

    map.put(“array”,数组)

    ⑥ 其他类型:直接使用

    2.多个参数:封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg键名

    map.put(“arg0”,参数值1)
    map.put(“param1”,参数值1)
    map.put(“arg1”,参数值2)
    map.put(“arg1”,参数值2)

    MyBatis提供了ParamNameResolver类进行参数封装

    ParamNameResolver中getNamedParams(Object[] args)

    public Object getNamedParams(Object[] args) {
            int paramCount = this.names.size();
            if (args != null && paramCount != 0) {
                if (!this.hasParamAnnotation && paramCount == 1) {
                    Object value = args[(Integer)this.names.firstKey()];
                    return wrapToMapIfCollection(value, this.useActualParamName ? (String)this.names.get(0) : null);
                } else {
                    Map<String, Object> param = new ParamMap();
                    int i = 0;
    
                    for(Iterator var5 = this.names.entrySet().iterator(); var5.hasNext(); ++i) {
                        Entry<Integer, String> entry = (Entry)var5.next();
                        param.put(entry.getValue(), args[(Integer)entry.getKey()]);
                        String genericParamName = "param" + (i + 1);
                        if (!this.names.containsValue(genericParamName)) {
                            param.put(genericParamName, args[(Integer)entry.getKey()]);
                        }
                    }
    
                    return param;
                }
            } else {
                return null;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    建议:使用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样可读性更高

  • 相关阅读:
    Cadence OrCAD Capture选择性批量关闭图纸页面功能详细介绍
    Linux基础开发工具之yum与vim
    identity4 系列————启航篇[二]
    有趣的java面试题-集合篇 (二) Map
    three.js学习笔记(二十一)——页面加载进度条
    分布式任务xxl-job调度中心安装说明
    ActiveReportsJS 3.1中文版|||ActiveReportsJS 3.1英文版
    vue添加全局的 loading 加载图标,或者点击按钮之后禁用按钮
    SpringBoot文件上传深入浅出
    web3.0时代分布式网络协议的异同
  • 原文地址:https://blog.csdn.net/weixin_46665411/article/details/128004144