戴老师的博客 - 存储过程
type: channel
link: https://www.tushu.info/tag/%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/
items: Spring 执行存储过程示例

Spring 执行存储过程示例
type: item
date: 2026-07-09T04:35:46+00:00
description: 在Spring中执行存储过程的方法：JDBC TemplateNamedParameterJdbcTemplateSimpleJdbcCallJDBC Template示例：String procedureCall = "{call proc_name(?, ?.html)}"; Map<String, Object> inParams = new HashMap<>(); inParams.put("inParam1", 1.html); Map<String, Object> outParams = jdbcTemplate.call(con -> { CallableStatement callableStatement = con.prepareCall(procedureCall.html); callableStatement.setInt(1, (Integer.html) inParams.get("inParam1".html)); callableStatement.registerOutParameter(2, Types.INTEGER); return callableStatement; }, outParams); int result = (int.html) outParams.get("outParam1".html); System.out.println("Result : " + result.html);NamedParameterJdbcTemplate示例：String procedureCall = "{call proc_name(:inParam1, :outParam1.html)}"; Map<String, Object> inParams = new HashMap<>(); inParams.put("inParam1", 1.html); Map<String, Object> outParams = new HashMap<>(); outParams.put("outParam1", Types.INTEGER); Map<String, Object> result = namedParameterJdbcTemplate.call(procedureCall, inParams, outParams.html); System.out.println("Result : " + result.get("outParam1".html));SimpleJdbcCall示例：SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate.html).withProcedureName("proc_name".html); SqlParameterSource in = new MapSqlParameterSource().addValue("inParam1", 1.html); Map<String, Object> out = simpleJdbcCall.execute(in.html); int result = (int.html) out.get("outParam1".html); System.out.println("Result : " + result.html);

Spring 执行存储过程示例
type: item
date: 2026-07-09T04:30:37+00:00
description: Spring 执行存储过程示例在 Spring 框架中，执行数据库存储过程（Stored Procedure）主要有以下几种常见方式：JdbcTemplateNamedParameterJdbcTemplateSimpleJdbcCall以下分别展示这三种方式的代码示例。1. JdbcTemplate 示例使用 JdbcTemplate 配合 CallableStatement 进行调用：String procedureCall = "{call proc_name(?, ?.html)}"; Map<String, Object> inParams = new HashMap<>(); inParams.put("inParam1", 1.html); Map<String, Object> outParams = jdbcTemplate.call(con -> { CallableStatement callableStatement = con.prepareCall(procedureCall.html); callableStatement.setInt(1, (Integer.html) inParams.get("inParam1".html)); callableStatement.registerOutParameter(2, Types.INTEGER); return callableStatement; }, outParams); int result = (int.html) outParams.get("outParam1".html); System.out.println("Result : " + result.html);2. NamedParameterJdbcTemplate 示例使用 NamedParameterJdbcTemplate 支持命名参数的调用：String procedureCall = "{call proc_name(:inParam1, :outParam1.html)}"; Map<String, Object> inParams = new HashMap<>(); inParams.put("inParam1", 1.html); Map<String, Object> outParams = new HashMap<>(); outParams.put("outParam1", Types.INTEGER); Map<String, Object> result = namedParameterJdbcTemplate.call(procedureCall, inParams, outParams.html); System.out.println("Result : " + result.get("outParam1".html));3. SimpleJdbcCall 示例使用 SimpleJdbcCall 进行更简洁的声明式调用（推荐）：SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate.html).withProcedureName("proc_name".html); SqlParameterSource in = new MapSqlParameterSource().addValue("inParam1", 1.html); Map<String, Object> out = simpleJdbcCall.execute(in.html); int result = (int.html) out.get("outParam1".html); System.out.println("Result : " + result.html);说明适用版本：上述示例基于 Spring JDBC 模块。技术建议：在标准 Spring Framework 中，SimpleJdbcCall 是官方推荐用于执行存储过程的方式，它提供了更好的元数据读取和参数映射能力。API 注意：JdbcTemplate 与 NamedParameterJdbcTemplate 的原生 API 并不直接支持示例中展示的 call 方法签名（通常需配合 ConnectionCallback 或自定义扩展实现）。若在生产环境中使用，请确认项目是否引入了特定的封装工具类，或优先采用 SimpleJdbcCall 以确保兼容性与稳定性。