Оба они делают одно и то же: есть ли причина отдавать предпочтение одному над другим?
Map<Integer, String> ret = new HashMap<>();
jdbcTemplate.query(query, new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
ret.put(rs.getInt("id"), rs.getString("val"));
}
});
Map<Integer, String> ret = jdbcTemplate.query(query, new ResultSetExtractor<Map<Integer, String>>() {
@Override
public Map<Integer, String> extractData(ResultSet rs) throws SQLException {
Map<Integer, String> ret = new HashMap<>();
while(rs.next()) {
ret.put(rs.getInt("id"), rs.getString("val"));
}
return ret;
}
});
Сложность кода кажется примерно одинаковой.Хотя RowCallbackHandler
короче, у него есть замыкание и вызов функции.ResultSetExtractor
немного длиннее, но имеет только локальные переменные и цикл вместо нескольких вызовов функций, с другой стороны, он повторяет тип данных 3 раза.
Быстрее ResultSetExtractor
(обрабатываетмного данных, и часто вызывается, поэтому производительность имеет значение)?
Какие варианты (или данные), на которых лучше?