Byłem bardzo ignorantem, to faktycznie działa! Możesz określić oba zestawy wyników, każdy z własnym maperem. W kodzie wygląda to tak:
SimpleJdbcCall call = new SimpleJdbcCall(this.jdbc)
.withProcedureName("get_users3")
.returningResultSet("rs1", new ParameterizedRowMapper<Object[]>()
{
@Override
public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException
{
return new Object[] { rowNum, rs.getInt(1), rs.getString(2) };
}
})
.returningResultSet("rs2", new ParameterizedRowMapper<Object[]>()
{
@Override
public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException
{
return new Object[] { rowNum, rs.getInt(1), rs.getString(2) };
}
});
Map<String, Object> res = call.execute();
assertNotNull(res.get("rs1"));
assertNotNull(res.get("rs2"));
List<Object[]> l1 = (List<Object[]>)res.get("rs1");
List<Object[]> l2 = (List<Object[]>)res.get("rs2");