猿问

使用批处理作业的 FlatFileItemReader 和 FlatFileItemWriter

我想从文本文件中读取、解析和写入数据。我实现了这一点,但我对标识符的声明有疑问。我在下面展示我的课程。


CustomerDataMapper.java


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.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 表示法,则无法写入数据库。有没有关于这个的任何方法或方法。非常感谢。


三国纷争
浏览 107回答 1
1回答

侃侃无极

我想问这个,FieldSetMapper这个类可以用吗是的,你可以使用这个类。由于您编写了 custom FieldSetMapper,因此您可以控制映射逻辑。您的映射器将类似于:public class CustomerDataMapper implements FieldSetMapper<Customer> {&nbsp; &nbsp;private static Log log = LogFactory.getLog(CustomerDataMapper.class);&nbsp; &nbsp;@Override&nbsp; &nbsp;public RawData mapFieldSet(FieldSet fieldSet) throws BindException {&nbsp; &nbsp; &nbsp; Customer customer = new Customer();&nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; customer.setCust_Num(fieldSet.readInt("id"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; customer.setName_Surname(fieldSet.readString("name"));&nbsp; &nbsp; &nbsp; }catch (Exception e){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.error("Mapping error, " + e);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; return customer;&nbsp; &nbsp;}}但是您的问题不在阅读方面(和FieldSetMapper),而是在作者方面。使用JdbcBatchItemWriteraItemSqlParameterSourceProvider从您的Customer对象中提取数据并将它们设置在 sql 查询中。默认情况下,BeanPropertyItemSqlParameterSourceProvider使用 a,此实现基于 JavaBeans 命名约定提取数据。但是,您可以提供自定义实现,在您的情况下将类似于:class CustomerItemSqlParameterSourceProvider implements ItemSqlParameterSourceProvider<Customer> {&nbsp; &nbsp; @Override&nbsp; &nbsp; public SqlParameterSource createSqlParameterSource(Customer customer) {&nbsp; &nbsp; &nbsp; &nbsp; Map<String, Object> params = new HashMap<>();&nbsp; &nbsp; &nbsp; &nbsp; params.put("custNum", customer.getCust_Num());&nbsp; &nbsp; &nbsp; &nbsp; params.put("nameSurname", customer.getName_Surname());&nbsp; &nbsp; &nbsp; &nbsp; return new MapSqlParameterSource(params);&nbsp; &nbsp; }}然后你把它设置CustomerItemSqlParameterSourceProvider在你的作家身上。希望这可以帮助。
随时随地看视频慕课网APP

相关分类

Java
我要回答