优先选择RowCallbackHandler和ResultSetExtractor

时间:2018-11-28 00:32:44

标签: java spring jdbc spring-jdbc jdbctemplate

这两个都做同一件事:是否有理由偏爱一个?

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会更快(它处理大量数据并且经常被调用,所以性能很重要)吗?

哪个选项(或数据)哪个更好?

0 个答案:

没有答案