Предпочитая RowCallbackHandler vs ResultSetExtractor - PullRequest
0 голосов
/ 28 ноября 2018

Оба они делают одно и то же: есть ли причина отдавать предпочтение одному над другим?

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 (обрабатываетмного данных, и часто вызывается, поэтому производительность имеет значение)?

Какие варианты (или данные), на которых лучше?

...