1. 程式人生 > >mybatis 呼叫儲存過程

mybatis 呼叫儲存過程

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個出參內容了。