mybatis 呼叫儲存過程
阿新 • • 發佈:2018-12-21
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個出參內容了。