由于在开发业务时,可能同时调用的存储过程不知道参数,但是参数从界面、或已经存储在数据库的获取,所以就不希望手动写存储过程的参数,通过简化的调用。
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。
-
灵活性:动态调用存储过程可以根据不同的参数来执行不同的逻辑,更加灵活。
-
提高代码重用性:存储过程可以在多个应用程序中重复使用,减少代码编写的工作量和维护成本。
-
简化维护:如果业务逻辑有变更,只需要修改存储过程代码,就可以在所有调用该存储过程的应用程序中生效,减少了维护成本和风险。
需要源码请私信
/**
* 传递指令代码和运行动作的序号,以及传递前台参数
* @param params
* @return
*/
@PostMapping("/runProcedure")
@ResponseBody
String runProcedure(@RequestParam Map<String, Object> params){
JSONObject json=new JSONObject();
Map<String, Object> parameters = new HashMap<String, Object> ();
String procedureName="P_CHECK_MATERIAL168"; //设置存储过程名称
procedureName=params.get("name").toString(); //动态获取存储过程名称
parameters.put("parameterName",procedureName);
List<Map<String,Object>> Procedurelist=mobileService.getProcedureParameter(parameters);
String sql="{call "+procedureName+"(" +getProcedureParameter(Procedurelist)+")}";
Map<String, Object> sqlParams= new HashMap<String, Object> ();
//sqlParams 必须要动态设置存储过程需要的参数及值内容,可能动态传递过来、取存储在数据库中的信息等,否则不能运行
Map<String, Object> runParams=getProcedureMap(Procedurelist,sqlParams);
runParams.put("sql",sql);
mobileService.autoProcedure(runParams);//自动带有返回的out值内容
json.put("result","OK");
return json.toJSONString();
}