我正在使用 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 来实现这个要求吗?
我该怎么办?我如何使用 | 字符处理每个字段必须与下一个字段分开的要求?