Всё зависит от конкретных потребностей и/или предпочтений. Кому-то может оказаться удобнее поймать SqlException вне метода, получающего данные, а кому-то получить null и понять, что записи не найдено.
В queryForObject можно просто передать маппер и не думать об обработке каждой записи ResultSet.
А в ResultSetExtractor можно без Exception обработать ситуацию как отсутствия найденных записей, так и получения нескольких записей, если ожидалась только одна.