当RowMapper返回null时,JdbcTemplate会做什么?

时间:2013-07-02 20:09:15

标签: java spring jdbctemplate

我正在使用JdbcTemplate.query(sql, args, rowMapper)方法调用来返回对象列表。在某些情况下,我想跳过一行,而不是将其添加到我返回的列表中。在这些情况下,我想到了两个解决方案:

  1. 让RowMapper返回null。
  2. 让RowMapper抛出异常(我知道处理SQLExceptions所以这是一种可能性)。
  3. 我的问题是:当RowMapper.mapRow返回null时,JdbcTemplate会将其添加到列表中吗?如果没有,我应该抛出SQLException吗?

3 个答案:

答案 0 :(得分:8)

这是将行添加到结果列表

的代码段
public class RowMapperResultSetExtractor<T> implements ResultSetExtractor<List<T>> {
    ...
    public List<T> extractData(ResultSet rs) throws SQLException {
        List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>());
        int rowNum = 0;
        while (rs.next()) {
            results.add(this.rowMapper.mapRow(rs, rowNum++));
        }
        return results;
    }
    ...

我们可以看到它真的会添加null。但是,除非存在错误,否则没有理由为什么RowMapper应该返回null。

答案 1 :(得分:1)

当你返回null然后它确实将这个null添加到列表中,同样,如果你抛出一个SQLException,它会被“包装”在扩展RuntimeException的Exception中,因为你不必显式包含try-catch语句,如果你不想。

答案 2 :(得分:0)

使用RowMapper填充后,您只需从列表中删除null。

rows = JdbcTemplate.query(sql, args, rowMapper);
rows.removeAll(Collections.singletonList(null));