Spring RowCallbackHandler究竟是如何工作的?我可以使用它从ResultSet自动创建txtfile获取执行查询吗?

时间:2016-02-18 14:49:35

标签: java spring spring-data spring-jdbc jdbctemplate

我正在使用 JdbcTemplate RowMapper 接口来执行查询,获取行列表并在对象上映射这些行。它的工作正常,具体我:

1) DatiPianiInterventiDaoImpl 这是我的DAO实现

public class DatiPianiInterventiDaoImpl implements DatiPianiInterventiDao {

    private DataSource dataSource;
    private JdbcTemplate jdbcTemplateObject;

    @Override
    public List<DatiPianiInterventiDto> getPianiInterventiList() {
        System.out.println("Into getPianiInterventiList()");

        String SQL = "select enteBeneficiario.COD_IST_ENT, intervento.COD_CUP, intervento.DES_TIT_INT, intervento.IMP_FIN_MIN, anagraficaRup.DES_COG_RUP, anagraficaRup.DES_NOM_RUP, anagraficaRup.FLG_SES, anagraficaRup.DAT_NAS, anagraficaRup.COD_COM, anagraficaRup.COD_FIS_RUP, anagraficaRup.DES_IND_EMA_RUP, anagraficaRup.COD_NUM_TEL, assocEnteBenRup.DES_DEC_NOM\r\n" + 
                "from TID023_INTERVENTO intervento\r\n" + 
                "INNER JOIN TID031_PIANO piano ON(intervento.PRG_INT = piano.PRG_INT )\r\n" + 
                "INNER JOIN TID022_ANAGRAFICARUP anagraficaRup ON(anagraficaRup.PRG_RUP = intervento.PRG_RUP)\r\n" + 
                "INNER JOIN TID018_ENTEBENEFICIARIO enteBeneficiario ON enteBeneficiario.COD_ENT = intervento.COD_ENT\r\n" + 
                "INNER JOIN TID019_ASSOCENTEBENRUP assocEnteBenRup ON assocEnteBenRup.PRG_RUP = intervento.PRG_RUP AND assocEnteBenRup.COD_ENT = intervento.COD_ENT \r\n" + 
                "where intervento.COD_TIP_STA_INT = 2 and piano.COD_TIP_BAN = 2 AND assocEnteBenRup.COD_TIP_NOM = 2;";

        System.out.println("QUERY: " + SQL);

        List<DatiPianiInterventiDto> datiPianiInterventoList = jdbcTemplateObject.query(SQL, new DatiPianiInterventiDtoMapper());

        return datiPianiInterventoList;
    }

    @Override
    public void setDataSource(DataSource ds) {
        this.dataSource = ds;
        this.jdbcTemplateObject = new JdbcTemplate(ds);

    }

}

如您所见,此类包含 getPianiInterventiList()方法,该方法执行返回 DatiPianiInterventiDto 对象列表的查询。

因此 DatiPianiInterventiDto 表示查询返回的 ResultSet 的单行,这些行通过以下方式映射到 DatiPianiInterventiDto 对象: / p>

2)实现Spring RowMapper 接口的 DatiPianiInterventiDtoMapper 类:

public class DatiPianiInterventiDtoMapper implements RowMapper<DatiPianiInterventiDto> {

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

        DatiPianiInterventiDto oggettoCorrente = new DatiPianiInterventiDto();

        oggettoCorrente.setCodIstEnt(rs.getString("COD_IST_ENT"));
        oggettoCorrente.setCodCup(rs.getString("COD_CUP"));
        oggettoCorrente.setDesTitInt(rs.getString("DES_TIT_INT"));
        oggettoCorrente.setImpFinMin(rs.getBigDecimal("IMP_FIN_MIN"));
        oggettoCorrente.setDesCogRup(rs.getString("DES_COG_RUP"));
        oggettoCorrente.setDesNomRup(rs.getString("DES_NOM_RUP"));
        oggettoCorrente.setFlgSes(rs.getString("FLG_SES"));
        oggettoCorrente.setDatNas(rs.getDate("DAT_NAS"));
        oggettoCorrente.setCodCom(rs.getString("COD_COM"));
        oggettoCorrente.setCodFisRup(rs.getString("COD_FIS_RUP"));
        oggettoCorrente.setDesIndEmaRup(rs.getString("DES_IND_EMA_RUP"));
        oggettoCorrente.setCodNumTel(rs.getString("COD_NUM_TEL"));
        oggettoCorrente.setDesDecNom(rs.getString("DES_DEC_NOM"));

        return oggettoCorrente;
    }

}

好的,它工作正常,所以我获得了对象列表。

现在我的问题是我必须创建一个文本文件,其中包含此列表中所有 DatiPianiInterventiDto 对象的所有属性的文本内容。上一个列表中的每个对象都必须在我的文本文件中创建一个新行,每个字段由下一个使用 | 字符分隔,如:

FIELD 1 VALUE|FIELD 2 VALUE|FIELD 3 VALUE|FIELD 4 VALUE|FIELD 5 VALUE

所以我知道我可以简单地创建一个新的文本文件,迭代列表并在此文件中为此列表中的每个 DatiPianiInterventiDto 对象写一个新行。

但据我所知,Spring为我提供了 RowCallbackHandler 接口,可直接从查询执行中获取的 ResultSet 创建文本文件:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/RowCallbackHandler.html < / p>

所以我的问题是:而是手动创建一个新的文本文件,迭代我点亮的 DatiPianiInterventiDto 对象,并为每个对象在这个文本文件中创建一行,我可以使用这个 RowCallbackHandler 来实现这个要求吗?

我该怎么办?我如何使用 | 字符处理每个字段必须与下一个字段分开的要求?

0 个答案:

没有答案