mybatis 调用存储过程

本文探讨了在处理复杂的存储过程调用时,为何选择Map作为参数类型。通过实例展示了如何将实体对象转换为Map,以解决存储过程可能未返回所有参数导致的错误。并介绍了如何在mapper和service层实现这一转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mapper.xml

<select id="callPWfSubmit"  parameterType="java.util.Map" resultType="java.util.Map" statementType="CALLABLE" >
     {CALL p_wf_submit
        (#{companyId,mode=IN,jdbcType=INTEGER},
        #{workflowMainId,mode=IN,jdbcType=INTEGER},
        #{hrmId,mode=IN,jdbcType=INTEGER},
        #{formId,mode=IN,jdbcType=VARCHAR},
        #{mode,mode=IN,jdbcType=INTEGER},
        #{ready,mode=IN,jdbcType=INTEGER},
        #{nodeHrm,mode=IN,jdbcType=VARCHAR},
        #{rtnNodeId,mode=IN,jdbcType=INTEGER},
        #{filePath,mode=IN,jdbcType=VARCHAR},
        #{urgency,mode=IN,jdbcType=INTEGER},
        #{remarks,mode=IN,jdbcType=VARCHAR},
        #{opcode,mode=IN,jdbcType=INTEGER},
        #{outNodeHrmType,mode=OUT,jdbcType=INTEGER},
        #{outResult,mode=OUT,jdbcType=INTEGER},
        #{outResultRemarks,mode=OUT,jdbcType=VARCHAR},
        #{nextNodeId,mode=OUT,jdbcType=INTEGER}
        )}
  </select>

至于为什么用map作为参数,是因为别人写的存储过程 可能没有返回出参,然后就会出现下面的问题。但是别人几百行上千行的存储过程,我是绝对不敢去动的。。。

然后就只能用可以为null的对象去接收返回值了,所以就从实体变为了map。

mapper

void callPWfSubmit(   Map<String,Object> map);

service  

  /**
     * 获取存储过程所需要的参数
     * @param wf
     * @return
     */
    public Map<String,Object> getWorkFlowMap(WorkFlow wf){
        //存储过程入参用 map代替 避免返回空值报错
        Map<String,Object> map = new HashMap<>();
        map.put("companyId",wf.getCompanyId());
        map.put("workflowMainId",wf.getWorkflowMainId());
        map.put("hrmId",wf.getHrmId());
        map.put("formId",wf.getFormId());
        map.put("mode",wf.getMode());
        map.put("ready",wf.getReady());
        map.put("nodeHrm",wf.getNodeHrm());
        map.put("rtnNodeId",wf.getRtnNodeId());
        map.put("filePath",wf.getFilePath());
        map.put("urgency",wf.getUrgency());
        map.put("remarks",wf.getRemarks());
        map.put("opcode",wf.getOpcode());
        map.put("outNodeHrmType",null);
        map.put("outResult",null);
        map.put("outResultRemarks",null);
        map.put("nextNodeId",null);
        return map;
    }

  vWorkFlowMapper.callPWfSubmit(map);

 

然后就可以获取map中的4个出参内容了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值