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()
時才需要它