springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用oracle存储过程
由于在开发业务时,可能同时调用的存储过程不知道参数,但是参数从界面、或已经存储在数据库的获取,所以就不希望手动写存储过程的参数,通过简化的调用。
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。
灵活性:动态调用存储过程可以根据不同的参数来执行不同的逻辑,更加灵活。
提高代码重用性:存储过程可以在多个应用程序中重复使用,减少代码编写的工作量和维护成本。
简化维护:如果业务逻辑有变更,只需要修改存储过程代码,就可以在所有调用该存储过程的应用程序中生效,减少了维护成本和风险。
完整DEMO下载地址: 让最方便调用存储过程
/**
* 以下是部分代码 * 传递指令代码和运行动作的序号,以及传递前台参数 * @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(); }