这两个都做同一件事:是否有理由偏爱一个?
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
会更快(它处理大量数据并且经常被调用,所以性能很重要)吗?
哪个选项(或数据)哪个更好?