java 调用 mysql存储过程

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

 mapper类定义方法

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

Mapper.xml 定义

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.*.*.mapper.SysUtilMapper">

	<!--	存储过程调用 -->
	<select id="callProcedure" parameterType="java.util.Map"  statementType="CALLABLE" resultType="java.util.Map">
       {call ${procName} (${paramExp})}
    </select>
</mapper>

Service定义

@Service
public class SysUtilService {
	@Autowired
	private SysUtilMapper  utilMapper;
	public Map<String,Object> callProcedure(Map<String,Object> param){
		return utilMapper.callProcedure(param);
	}
}

 

 接下来就是调用了

    /**
	 *
	 * @param prcoName存储过程名称
	 * @return
	 */
    @ApiOperation(value = "存储过程调用", notes = "存储过程调用")
	@PostMapping("/doCallProc")
	@ResponseBody
	public AjaxResult doCallProc(@RequestParam String prcoName)
	{
		log.info("执行存储过程调用");
		//存储过程调用
		Map<String,Object> 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<String,Object> result=utilService.callProcedure(procParam);
		System.out.println("执行结果"+result.get("out_code")+result.get("out_desc"));
		
	}

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

至此,大功告成!

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值