使用 SimpleJdbcCall 优化 MSSQL 服务器中存储过程的执行

Optimization of execution of stored procedure in MSSQL server with SimpleJdbcCall

我有执行某些存储过程的代码。 mssql-jdbc 连接到 Microsoft 的驱动程序 SQL 使用服务器数据库。

这里是简化的代码

SimpleJdbcCall call = simpleJdbcCallFactory.create(jdbcTemplate)
    .withSchemaName(SCHEMA)
    .withProcedureName(SP)
    .declareParameters(
        new SqlParameter("Id1", Types.INTEGER),
        new SqlParameter("Id2", Types.TINYINT),
        new SqlParameter("Id3", Types.INTEGER))
    .returningResultSet("result", (rs, rowNum) -> MappingObject.builder()
            .id(rs.getInt("Id"))
            .date(rs.getTimestamp("Date"))
            // .......
            .build());

MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("Id1", 1);
params.addValue("Id2", 2);
params.addValue("Id3", 3);

Map queryRes = call.execute(params);  

当我 运行 时,我在分析器 3 调用中看到:

我在探查器 3 sql 中看到每次我 运行 这个存储过程都会调用。我只想打一个电话,可以用 SimpleJdbcCall 吗?

我刚刚找到了答案,也许这对某些人有用。我们需要避免 3 次调用的是 withoutProcedureColumnMetaDataAccess() for SimpleJdbcCall

像这样

SimpleJdbcCall getQACall = simpleJdbcCallFactory.create(jdbcTemplate)
    .withSchemaName(SCHEMA_ARTICLE)
    .withProcedureName(SP_GET_ALL_QUESTIONS_ANSWERS)
    .withoutProcedureColumnMetaDataAccess()
    .declareParameters(
    // etc