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个出参内容了。