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 的第一個值定義了返回值。此外,如果你的過程是函式,在執行時使用 withFunctionNameexecuteFunction
  • withNamedBinding() 如果要使用名稱而不是位置來提供引數。
  • useInParameterNames() 定義引數順序。我認為如果你將引數作為列表而不是引數名稱對映到值,則可能需要這樣做。雖然只有在使用 withoutProcedureColumnMetaDataAccess() 時才需要它