【问题标题】:Spring RowMapper is being ignoredSpring RowMapper 被忽略
【发布时间】:2021-12-30 00:58:51
【问题描述】:

我这样调用我的存储过程:

        SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
                .returningResultSet("LookupResponse", new LookupMapper())
                .withProcedureName(lookupProcedureName);

并传递一些参数:

        SqlParameterSource in = new MapSqlParameterSource()
            .addValue("id", request.getId())
            .addValue("Username", userName)

行映射器的代码:

public class LookupMapper implements RowMapper<LookupResponse> {

    @Override
    public LookupResponse mapRow(ResultSet rs, int i) throws SQLException {
        LookupResponse lookupResponse = new LookupResponse();
        lookupResponse.setDeviceId(rs.getInt("DeviceId"));
        lookupResponse.setApplicationId(rs.getInt("AppId"));
        return lookupResponse;
    }
}

然后我调用数据库:

Map<String, Object> out = jdbcCall.execute(in);

我在返回的映射中看到未映射的键值对,当我这样做时:

(Collection<LookupResponse>) out.get("LookupResponse");

它返回空值。

我的行映射响应没有键。 相同类型的代码适用于另一个存储过程......我不明白可能是什么原因。控制台中没有异常,rowMapper 只是被忽略了。请帮我理解。

【问题讨论】:

  • LookupMapper 的代码在哪里?
  • @JimGarrison 已添加,请查看
  • 在 mapRow 中放一个断点,看看发生了什么。
  • @tgdavies 什么都没有发生,它没有进入那个方法
  • 那么您的存储过程可能没有返回任何行,或者"LookupResponse" 与结果/光标的名称不匹配。

标签: java spring spring-jdbc jdbctemplate


【解决方案1】:

如下更改 Map&lt;String, Object&gt; out = jdbcCall.execute(in);Map&lt;String, Object&gt; outMap = jdbcCall.withReturnValue().execute(in);

【讨论】:

  • 但是您的代码中没有指定映射器,我的主要问题是没有调用映射器
  • 只需替换你的数据库调用代码,看看你是否得到响应
  • 是的,正如我所说,我在返回的映射中看到键值对,问题是没有调用 rowmapper,所以所有这些值都未映射
【解决方案2】:

我遇到了同样的问题。这样做是为了排除故障

System.out.println(out);

确保字符串以“LookupResponse”开头

{LookupResponse=[...

如果没有相应地替换它

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 2020-05-07
    • 2018-07-26
    • 2020-03-12
    • 1970-01-01
    • 2012-05-19
    • 2015-08-03
    • 2021-08-26
    • 2021-11-04
    相关资源
    最近更新 更多