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

ktm*_*124 8 java spring jdbctemplate

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

  1. 让RowMapper返回null.
  2. 让RowMapper抛出异常(我知道SQLExceptions被处理,所以这是一种可能性).

我的问题是:当RowMapper.mapRow返回null时,JdbcTemplate是否将其添加到列表中?如果没有,我应该抛出SQLException吗?

Evg*_*eev 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;
    }
    ...
Run Code Online (Sandbox Code Playgroud)

我们可以看到它真的会添加null.但是,没有理由为什么RowMapper应该返回null,除非它有一个bug.