说说如何使用 Spring jdbc 来执行存储过程
程序员文章站
2022-05-24 12:30:01
...
Spring jdbc 提供了jdbcTemplate 对象,该对象定义了 execute 方法可用于执行存储过程。该方法存在许多重载方式,我们使用的是execute(CallableStatementCreator csc, CallableStatementCallback action)。
CallableStatementCreator 对象用于定义调用存储过程的入参与出参。CallableStatementCallback 对象用于定义执行以及接受存储过程的返回值。这两个对象都采用lambda表达式来实现,因为这样比匿名函数更简洁。
以下是以通用的方式来执行存储过程:
jdbcTemplate.execute(con -> {
String proc = sql;
CallableStatement cs = con.prepareCall(proc);
log.debug("开始注册入、出参 ->>");
//注册入参
int currentIndex = 1;
for (int i = 1; i <= inParamValues.size(); i++) {
cs.setObject(i, inParamValues.get(i - 1));
currentIndex++;
}
//注册出参
for (int i = currentIndex; i < outParamNames.size() + currentIndex; i++) {
cs.registerOutParameter(i, Types.JAVA_OBJECT);
}
log.debug("注册入、出参成功 <<-");
return cs;
}, (CallableStatementCallback<Object>) cs -> {
cs.execute();
return null;
});
注册入参时,利用CallableStatement 对象的setObject() 方法来传递入参,这样我们就无须把入参转换为相应的类型。
注册出参时,把Types.JAVA_OBJECT传入 CallableStatementCallback对象的registerOutParameter() 方法,这也是为了统一处理。
在 CallableStatementCallback对象中,直接返回 null。当然这里也可以根据实际需要来返回相应的实例对象。
上一篇: bboss持久层多数据源配置及多数据库事务控制使用方法
下一篇: Python 字符串去除空格的方法