使用JdbcBatchItemWriter更新重复键

时间:2014-02-03 16:05:34

标签: java sql spring spring-batch insert-update

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

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

这很简单:
编写自定义ItemWriter<>并在write()方法中执行插入操作,如果重复,则执行更新;检查dup键是否使用查找或重复的异常catch。