मैं मौजूदा 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;
    }
}

और अंत में, डीएओ:

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")); को असम्बद्ध घोषित करता हूं, तो मुझे एक त्रुटि मिलेगी, क्योंकि मेरे डीएओ में, मैं उस क्षेत्र का उपयोग नहीं कर रहा हूं।

लेकिन क्या होगा अगर मुझे एक और विधि बनाने की ज़रूरत है जो केवल ordensInternas फ़ील्ड का उपयोग करे? तो फिर, मुझे एक त्रुटि मिलेगी ...

तो, मेरा संदेह यहाँ है: अगर मुझे इकाई से ordensAtrasadas फ़ील्ड का उपयोग करने की आवश्यकता है, तो क्या मुझे एक और मैपर लागू करने के लिए एक और वर्ग बनाना होगा? या क्या कोई तरीका है जिससे मैं अपनी वर्तमान OrdemMapper कक्षा में कोई सशर्त कर सकता हूं?

0
Marcelo Melo 13 मार्च 2020, 21:59

1 उत्तर

सबसे बढ़िया उत्तर

बस अपने असाइनमेंट को अलग-अलग ट्राइ-कैच स्टेटमेंट में डालें।

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;
    }
}
1
bcr666 13 मार्च 2020, 19:05