Spring 执行存储过程示例
Spring 执行存储过程示例
在 Spring 框架中,执行数据库存储过程(Stored Procedure)主要有以下几种常见方式:
- JdbcTemplate
- NamedParameterJdbcTemplate
- SimpleJdbcCall
以下分别展示这三种方式的代码示例。
1. JdbcTemplate 示例
使用 JdbcTemplate 配合 CallableStatement 进行调用:
String procedureCall = "{call proc_name(?, ?)}";
Map<String, Object> inParams = new HashMap<>();
inParams.put("inParam1", 1);
Map<String, Object> outParams = jdbcTemplate.call(con -> {
CallableStatement callableStatement = con.prepareCall(procedureCall);
callableStatement.setInt(1, (Integer) inParams.get("inParam1"));
callableStatement.registerOutParameter(2, Types.INTEGER);
return callableStatement;
}, outParams);
int result = (int) outParams.get("outParam1");
System.out.println("Result : " + result);2. NamedParameterJdbcTemplate 示例
使用 NamedParameterJdbcTemplate 支持命名参数的调用:
String procedureCall = "{call proc_name(:inParam1, :outParam1)}";
Map<String, Object> inParams = new HashMap<>();
inParams.put("inParam1", 1);
Map<String, Object> outParams = new HashMap<>();
outParams.put("outParam1", Types.INTEGER);
Map<String, Object> result = namedParameterJdbcTemplate.call(procedureCall, inParams, outParams);
System.out.println("Result : " + result.get("outParam1"));3. SimpleJdbcCall 示例
使用 SimpleJdbcCall 进行更简洁的声明式调用(推荐):
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("proc_name");
SqlParameterSource in = new MapSqlParameterSource().addValue("inParam1", 1);
Map<String, Object> out = simpleJdbcCall.execute(in);
int result = (int) out.get("outParam1");
System.out.println("Result : " + result);说明
- 适用版本:上述示例基于 Spring JDBC 模块。
- 技术建议:在标准 Spring Framework 中,
SimpleJdbcCall是官方推荐用于执行存储过程的方式,它提供了更好的元数据读取和参数映射能力。 - API 注意:
JdbcTemplate与NamedParameterJdbcTemplate的原生 API 并不直接支持示例中展示的call方法签名(通常需配合ConnectionCallback或自定义扩展实现)。若在生产环境中使用,请确认项目是否引入了特定的封装工具类,或优先采用SimpleJdbcCall以确保兼容性与稳定性。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/spring-zhi-xing-cun-chu-guo-cheng-shi-li.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。