spring boot 调用带参数的存储过程

一、第一种方式

存储过程带参数:in out 

在dao层@Repository

@Autowired //注入数据库操作

private JdbcTemplate jdbcTemplate;

public List<String> doDeposit(AcctRechargeBeanEvt evt) {
List<String> resultList = (List<String>) jdbcTemplate.execute(new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection con) throws SQLException {
String storedProc = "{call pro_account_recharge(?,?,?,?,?,?,?,?,?,?)}";// 调用的sql
CallableStatement cs = con.prepareCall(storedProc);
cs.setString(3, evt.getUnitcode()); 
cs.setString(4, evt.getLimitcode()); 
cs.setDouble(6, evt.getOperaValue()); 
cs.setString(7, evt.getAcctBookTypeCode()); 
cs.setLong(8, evt.getOperator());// 操作人id
cs.registerOutParameter(9,java.sql.Types.INTEGER);// 注册输出参数 返回类型
cs.registerOutParameter(10,java.sql.Types.VARCHAR);// 注册输出参数 返回信息
return cs;
}
}, new CallableStatementCallback() {
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
List<String> result = new ArrayList<String>();
cs.execute();

result.add(cs.getString(9));
result.add(cs.getString(10));
return result;
}
});


return resultList;

}

resultList就是存储过程返回的结果数据。

 

网上例子:

create or replace procedure sp_list_table(param1 in varchar2,param2 out mypackage.my_cursor) is
    begin
    open my_cursor for select * from myTable;

    end sp_list_table;

public void test() { 
  List resultList = (List) jdbcTemplate.execute( 
     new CallableStatementCreator() { 
        public CallableStatement createCallableStatement(Connection con) throws SQLException { 
           String storedProc = "{call sp_list_table(?,?)}";// 调用的sql 
           CallableStatement cs = con.prepareCall(storedProc); 
           cs.setString(1, "p1");// 设置输入参数的值 
           cs.registerOutParameter(2, OracleTypes.CURSOR);// 注册输出参数的类型 
           return cs; 
        } 
     }, new CallableStatementCallback() { 
        public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException { 
           List resultsMap = new ArrayList(); 
           cs.execute(); 
           ResultSet rs = (ResultSet) cs.getObject(2);// 获取游标一行的值 
           while (rs.next()) {// 转换每行的返回值到Map中 
              Map rowMap = new HashMap(); 
              rowMap.put("id", rs.getString("id")); 
              rowMap.put("name", rs.getString("name")); 
              resultsMap.add(rowMap); 
           } 
           rs.close(); 
           return resultsMap; 
        } 
  }); 
  for (int i = 0; i < resultList.size(); i++) { 
     Map rowMap = (Map) resultList.get(i); 
     String id = rowMap.get("id").toString(); 
     String name = rowMap.get("name").toString(); 
     System.out.println("id=" + id + ";name=" + name); 
  } 

 

二、第二种

mapper:

@SelectProvider(type = CustomerProvider.class , method = "cancelIntegralGetInfo")
    void cancelIntegralGetInfo(Long orderId);

provider:

public String cancelIntegralGetInfo(Long orderId) {
		return "call cancelIntegralGetInfo(#{orderId});";
	}

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个使用Spring Boot执行存储过程的示例代码: 1. 首先,在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> ``` 2. 接着,在application.properties文件中添加数据库连接配置信息,例如: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=myuser spring.datasource.password=mypassword ``` 3. 在Java代码中,创建一个存储过程执行器类,例如: ``` @Component public class StoredProcedureExecutor { @Autowired private JdbcTemplate jdbcTemplate; public void executeStoredProcedure() { jdbcTemplate.execute("CALL my_stored_procedure()"); } } ``` 4. 在需要执行存储过程的位置调用该执行器类的executeStoredProcedure()方法即可,例如: ``` @RestController public class MyController { @Autowired private StoredProcedureExecutor storedProcedureExecutor; @GetMapping("/execute-stored-procedure") public void executeStoredProcedure() { storedProcedureExecutor.executeStoredProcedure(); } } ``` 注意,在这个示例中,我们假设存储过程的名称为my_stored_procedure(),并且它不接受任何参数。如果你需要传递参数存储过程,可以使用jdbcTemplate.call()方法,例如: ``` jdbcTemplate.call("{CALL my_stored_procedure(?)}", Collections.singletonList("my_parameter")); ``` 这个示例中,我们传递了一个名为my_parameter的参数存储过程

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值