为了账号安全,请及时绑定邮箱和手机立即绑定

使用批处理作业的 FlatFileItemReader 和 FlatFileItemWriter

使用批处理作业的 FlatFileItemReader 和 FlatFileItemWriter

三国纷争 2022-05-21 20:32:29
我想从文本文件中读取、解析和写入数据。我实现了这一点,但我对标识符的声明有疑问。我在下面展示我的课程。CustomerDataMapper.javapublic class CustomerDataMapper implements FieldSetMapper<Customer> {     private static Log log = LogFactory.getLog(CustomerDataMapper.class);     @Override     public RawData mapFieldSet(FieldSet fieldSet) throws BindException {          Customer customer = new Customer();          try {              customer.setCustNum(fieldSet.readInt("id"));              customer.setNameSurname(fieldSet.readString("name"));          }catch (Exception e){              log.error("Mapping error, " + e);          }          return customer;     }}客户.java@Component@Scope("prototype")public class Customer implements Serializable{    private Integer custNum;    private String nameSurname;    public String getCustNum) {        return custNum;    }    public void setCustNum(String custNum) {        this.custNum = custNum;    }    public String getNameSurname() {        return nameSurname;    }    public void setNameSurname(String nameSurname) {        this.nameSurname = nameSurname;    }}文件管理器.xml<bean id="customerFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">    <property name= "encoding" value ="Cp1254"/>                               <property name="resource" value="#{jobParameters['processPath']}"/>    <property name="lineMapper">    <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">        <property name="lineTokenizer">            <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">                <property name="names" value="id, name"/>                <property name="columns" ref="1-9, 10-30"/>            </bean>        </property>我想问这个,我可以将下面的这个类用于FieldSetMapper。如果我在定义标识符时不使用 Camelcase 表示法,则无法写入数据库。有没有关于这个的任何方法或方法。非常感谢。
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我想问这个,FieldSetMapper这个类可以用吗


是的,你可以使用这个类。由于您编写了 custom FieldSetMapper,因此您可以控制映射逻辑。您的映射器将类似于:


public class CustomerDataMapper implements FieldSetMapper<Customer> {

   private static Log log = LogFactory.getLog(CustomerDataMapper.class);


   @Override

   public RawData mapFieldSet(FieldSet fieldSet) throws BindException {

      Customer customer = new Customer();


      try {

          customer.setCust_Num(fieldSet.readInt("id"));

          customer.setName_Surname(fieldSet.readString("name"));

      }catch (Exception e){

          log.error("Mapping error, " + e);

      }

      return customer;

   }

}

但是您的问题不在阅读方面(和FieldSetMapper),而是在作者方面。使用JdbcBatchItemWriteraItemSqlParameterSourceProvider从您的Customer对象中提取数据并将它们设置在 sql 查询中。默认情况下,BeanPropertyItemSqlParameterSourceProvider使用 a,此实现基于 JavaBeans 命名约定提取数据。但是,您可以提供自定义实现,在您的情况下将类似于:


class CustomerItemSqlParameterSourceProvider implements ItemSqlParameterSourceProvider<Customer> {


    @Override

    public SqlParameterSource createSqlParameterSource(Customer customer) {

        Map<String, Object> params = new HashMap<>();

        params.put("custNum", customer.getCust_Num());

        params.put("nameSurname", customer.getName_Surname());

        return new MapSqlParameterSource(params);

    }

}

然后你把它设置CustomerItemSqlParameterSourceProvider在你的作家身上。


希望这可以帮助。


查看完整回答
反对 回复 2022-05-21
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信