我的项目使用spring Batch,我只是尝试使用JdbcBatchItemWriter作为编写器从csv文件读取并将数据加载到数据库。

我正在寻找一种告诉作者插入新行的方法,但是,在重复键(或重​​复的唯一标识符)上更新行而不是失败。

我知道我可以直接在sql语句中执行此操作,但这将特定于Mysql,尽管我希望我的代码独立于DBMS。

这是我在Java配置中的作家声明

@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;
}

在此先感谢您的帮助

最佳答案

很简单:
编写一个自定义的ItemWriter<>,并在write()方法中进行插入,如果有重复,则进行更新;检查dup键是使用查找还是重复的异常捕获。

关于java - 使用JdbcBatchItemWriter更新重复 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21532058/

10-08 22:32