我正在构建一个将通过webservice调用的spring批处理作业。 Web服务将获取select和delete语句对的列表。 select语句返回的记录将作为CSV保存在文件系统中,然后通过执行提供的delete语句删除相同的记录。
我看过很多ColumnRowMapper示例,但这需要我为每个表实体创建一个POJO。我正在寻找一个解决方案,可以处理任何表中的任何列。有关方法的任何建议吗?
**** **** UPDATE 自写这篇文章以来,我已经找到了以下解决方案。
@Bean
@StepScope
public JdbcCursorItemReader<Map<String, ?>> getRowsOfDataForExportFromTable(){
JdbcCursorItemReader<Map<String, ? extends Object>> databaseReader = new JdbcCursorItemReader<>();
databaseReader.setDataSource(jdbcTemplate.getDataSource());
databaseReader.setSql("select * from SOME_TABLE where last_updated_date < DATE_SUB(NOW(), INTERVAL 10 DAY);");
databaseReader.setRowMapper(new RowMapper<Map<String, ? extends Object>>() {
@Override
public Map<String, ? extends Object> mapRow(ResultSet resultSet, int i) throws SQLException {
Map<String,String> resultMap = new LinkedHashMap<>();
int numOfColumns = resultSet.getMetaData().getColumnCount();
for (int j = 1; j < numOfColumns+1; j++){
String columnName = resultSet.getMetaData().getColumnName(j);
String value = resultSet.getString(j);
resultMap.put(columnName,value);
}
return resultMap;
}
});
return databaseReader;
}
上面的ItemReader将构建一个LinkedHashMap行映射器,其中列名是键,列值是值。
答案 0 :(得分:1)
您是否尝试使用Map
代替POJO
?您可以在Reader
中动态填充它,然后从此CSV
创建Map
文件。