Должен ли я создать еще один RowMapper? - PullRequest
0 голосов
/ 13 марта 2020

Я разрабатываю это приложение для извлечения данных из одной таблицы из существующей базы данных Oracle.

Здесь у нас есть сущность :

public class OrdemDeServicoCount {

    private Long ordensInternas;
    private Long ordensAtrasadas;

    // assume getters and setters
}

картограф :

public class OrdemMapper implements RowMapper<OrdemDeServicoCount> {

    @Override
    public OrdemDeServicoCount mapRow(ResultSet rs, int rowNum) throws SQLException {

        OrdemDeServicoCount ordens = new OrdemDeServicoCount();

        ordens.setOrdensInternas(rs.getLong("ordensInternas"));

//      ordens.setOrdensAtrasadas(rs.getLong("ordensAtrasadas"));

        return ordens;
    }
}

И, наконец, DAO :

public class OrdemDAO {

    private JdbcTemplate jdbcTemplate;

    public OrdemDAO(JdbcTemplate jdbcTemplate) {
        super();
        this.jdbcTemplate = jdbcTemplate;
    }

    public List<OrdemDeServicoCount> countOrdensInternasSemEncerrar() {

        String sql = "SELECT COUNT(a.nr_sequencia) AS ordensInternas FROM MAN_ORDEM_SERVICO a "
                + "WHERE a.IE_STATUS_ORDEM IN (1,2) AND a.NR_GRUPO_PLANEJ IN (21)";

        List<OrdemDeServicoCount> ordens = jdbcTemplate.query(sql, new OrdemMapper());

        return ordens;
    }

Кстати, вы все должны знать что если я объявлю раскомментированную строку ordens.setOrdensInternas(rs.getLong("ordensInternas")); в mapper , я получу ошибку, потому что в моем DAO я не использую это поле.

Но что, если мне нужно создать другой метод, использующий только поле ordensInternas ? Опять же, я получил бы ошибку ...

Итак, я сомневаюсь: если мне нужно использовать поле ordensAtrasadas от сущности, мне придется создать другой класс просто реализовать еще один маппер? Или есть способ, которым я могу сделать любой условный в моем текущем OrdemMapper классе?

1 Ответ

1 голос
/ 13 марта 2020

Просто поместите свои назначения в отдельные операторы try-catch.

public class OrdemMapper implements RowMapper<OrdemDeServicoCount> {

    @Override
    public OrdemDeServicoCount mapRow(ResultSet rs, int rowNum) throws SQLException {

        OrdemDeServicoCount ordens = new OrdemDeServicoCount();

        try {
            ordens.setOrdensInternas(rs.getLong("ordensInternas"));
        } catch (SQLException ex) {
            // This will happen if the columnIndex is invalid among other things
        }

        try {
            ordens.setOrdensAtrasadas(rs.getLong("ordensAtrasadas"));
        } catch (SQLException ex) {
            // This will happen if the columnIndex is invalid among other things
        }

        return ordens;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...