SimpleJdbcCall 创建
通常,你需要在服务中创建 SimpleJdbcCalls。
此示例假定你的过程具有单个输出参数,该参数是游标; 你需要调整 declareParameters 以匹配你的程序。
@Service
public class MyService() {
@Autowired
private DataSource dataSource;
// Autowire your configuration, for example
@Value("${db.procedure.schema}")
String schema;
private SimpleJdbcCall myProcCall;
// create SimpleJdbcCall after properties are configured
@PostConstruct
void initialize() {
this.myProcCall = new SimpleJdbcCall(dataSource)
.withProcedureName("my_procedure_name")
.withCatalogName("my_package")
.withSchemaName(schema)
.declareParameters(new SqlOutParameter(
"out_param_name",
Types.REF_CURSOR,
new SqlRowSetResultSetExtractor()));
}
public SqlRowSet myProc() {
Map<String, Object> out = this.myProcCall.execute();
return (SqlRowSet) out.get("out_param_name");
}
}
你可以在此处使用许多选项:
- **** 如果你有重载的过程名称或者只是不希望 SimpleJdbcCall 对数据库进行验证,则需要
withoutProcedureColumnMetaDataAccess()
。 withReturnValue()
如果 procedure 有返回值。给予 declareParameters 的第一个值定义了返回值。此外,如果你的过程是函数,则在执行时使用 withFunctionName 和 executeFunction 。withNamedBinding()
如果要使用名称而不是位置来提供参数。useInParameterNames()
定义参数顺序。我认为如果你将参数作为列表而不是参数名称映射到值,则可能需要这样做。虽然只有在使用withoutProcedureColumnMetaDataAccess()
时才需要它