DeleteGlassesJdbcBatchItemWriter.java
package com.sintia.ffl.admin.optique.catalogue.batch.writer.purgeglasses;
import com.sintia.ffl.admin.optique.catalogue.batch.reporter.PurgeVerreReporter;
import com.sintia.ffl.admin.optique.services.dto.Glasses;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
@Component
public class DeleteGlassesJdbcBatchItemWriter implements ItemWriter<Glasses> {
private final JdbcTemplate template;
private final PurgeVerreReporter purgeVerreReporter;
@Autowired
public DeleteGlassesJdbcBatchItemWriter(
DataSource dataSource,
PurgeVerreReporter purgeVerreReporter
) {
this.template = new JdbcTemplate(dataSource);
this.purgeVerreReporter = purgeVerreReporter;
}
@Override
public void write(@NonNull List<? extends Glasses> items) throws Exception {
int[] results = this.template.batchUpdate(
"delete from modele_verre where c_opto_code_verre=? AND id_distributeur=? AND id_fabricant=?",
new BatchPreparedStatementSetter() {
@Override
public void setValues(@NonNull PreparedStatement ps, int i) throws SQLException {
Glasses item = items.get(i);
ps.setString(1, item.getGlassOptoCode());
ps.setInt(2, Integer.parseInt(item.getProvider()));
ps.setInt(3, Integer.parseInt(item.getMaker()));
}
@Override
public int getBatchSize() {
return items.size();
}
});
int totalDeleted = 0;
for (int nbDeleted : results) {
totalDeleted += nbDeleted;
}
purgeVerreReporter.addGlassesDeleted(totalDeleted);
}
}