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