spring我的项目的批处理,我只是尝试从csv文件读取并使用JdbcBatchItemWriter作为编写器将数据加载到数据库。
我正在寻找一种方法来告诉作者插入一个新行,但是,在重复键(或重复的唯一标识符)更新行而不是失败。
我知道我可以直接在sql语句中执行此操作,但这将特定于Mysql,但我希望我的代码与DBMS无关。
这是我在java config中的编写器声明
@Bean
@StepScope
public ItemWriter<Person> writerHeadingCollectionsToDb(DataSource datasource) {
String sqlStatement = "INSERT INTO abcd(id, first_name, last_name, phone_number"
+ "VALUES (:id, :firstName, :lastName, :phoneNumber)";
JdbcBatchItemWriter<Person> itemWriter = new JdbcBatchItemWriter<Person>();
itemWriter.setSql(sqlStatement );
itemWriter.setDataSource(dataSource);
itemWriter.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Person>());
return itemWriter;
}
提前感谢您的帮助
答案 0 :(得分:2)
这很简单:
编写自定义ItemWriter<>
并在write()
方法中执行插入操作,如果重复,则执行更新;检查dup键是否使用查找或重复的异常catch。