java 调用 mysql存储过程

        在工作中经常会有需要通过java去调用存储过程的情况,实际工作中可能会有N多个存储过程,各自实现相应的业务场景,而我们需要在不同的地方知道调用某个存储过程,比如从前端请求某个存储过程,或者别的业务模块通过接口调用某个存储过程,那么能不能写个通用的方法去完成,答案是肯定的,此处以mysql为例,废话不多上代码:

 mapper类定义方法

public interface SysUtilMapper {
    /**
	 * 
	 * @param param 存储过程参数,包括存储过程名称 输入输入参数表达式 输入参数值
	 * @return
	 */
    Map callProcedure(Map param);
}

Mapper.xml 定义






	
	

Service定义

@Service
public class SysUtilService {
	@Autowired
	private SysUtilMapper  utilMapper;
	public Map callProcedure(Map param){
		return utilMapper.callProcedure(param);
	}
}

 

 接下来就是调用了

    /**
	 *
	 * @param prcoName存储过程名称
	 * @return
	 */
    @ApiOperation(value = "存储过程调用", notes = "存储过程调用")
	@PostMapping("/doCallProc")
	@ResponseBody
	public AjaxResult doCallProc(@RequestParam String prcoName)
	{
		log.info("执行存储过程调用");
		//存储过程调用
		Map procParam=new HashMap<>();
		//存储过程名称
		procParam.put("procName",prcoName);
		//存储过程参数 如果是带有输入输出参数的存储过程 拼接参数字符串:一个参数 '#            {paramName,mode=modeType,jdbcType=Type}'
		// modeType: IN OUT  Type:VARCHAR 等
		//同时 有入参的话 map在插入 参数名:参数值 的键值对
		procParam.put("paramExp","#{in_value,mode=IN,jdbcType=VARCHAR},#{out_code,mode=OUT,jdbcType=VARCHAR},#{out_desc,mode=OUT,jdbcType=VARCHAR}");
        procParam.put("in_value","测试输入值");
		Map result=utilService.callProcedure(procParam);
		System.out.println("执行结果"+result.get("out_code")+result.get("out_desc"));
		
	}

方法中外部输入的只有存储过程名称,当然输入参数也可从外部输入,相应增加即可。

至此,大功告成!

你可能感兴趣的:(java基础,java,mysql,开发语言)