package cn.cib.writer;

import cn.cib.entity.write.People;
import cn.cib.repository.write.PeopleCrudRepository;
import org.springframework.batch.item.data.RepositoryItemWriter;
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;

/**
 * @author clyde lou
 */
@Component
public class PeopleWriter {
    @Autowired
    @Qualifier("w_ds")
    public DataSource w_dataSource;

    @Autowired
    private PeopleCrudRepository peopleCrudRepository;

    @Bean
    @Qualifier("jdbcBatchItemWriter")
    public JdbcBatchItemWriter<People> jdbcBatchItemWriter() {
        JdbcBatchItemWriter<People> writer = new JdbcBatchItemWriter<>();
        writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
        writer.setSql("insert into people (person_id, first_name, last_name) VALUES (uuid(), :firstName, :lastName)");
        writer.setDataSource(w_dataSource);
        return writer;
    }

    @Bean
    @Qualifier("repositoryItemWriter")
    public RepositoryItemWriter<People> repositoryItemWriter() {
        RepositoryItemWriter<People> peopleRepositoryItemWriter = new RepositoryItemWriter<>();
        peopleRepositoryItemWriter.setRepository(peopleCrudRepository);
        peopleRepositoryItemWriter.setMethodName("save");
        return peopleRepositoryItemWriter;
    }


}