我这样称呼我的存储过程:
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;
}
}然后我叫DB:
Map<String, Object> out = jdbcCall.execute(in);我在返回的映射中看到未映射的键值对,当我看到时:
(Collection<LookupResponse>) out.get("LookupResponse");它返回null。
没有包含我的行映射响应的键。同一类型的代码适用于另一个存储过程..。我不知道是什么原因。控制台中没有异常,rowMapper只是被忽略了。请帮我理解。
发布于 2021-12-30 01:59:27
按照下面的Map<String, Object> out = jdbcCall.execute(in);更改为Map<String, Object> outMap = jdbcCall.withReturnValue().execute(in);
发布于 2022-02-15 19:15:46
我也有同样的问题。这样做是为了排除故障
System.out.println(out);
确保字符串以"LookupResponse“开头
{LookupResponse=[...
如果不相应地替换它
https://stackoverflow.com/questions/70526470
复制相似问题