Java 如何使用spring批处理将数据库结果集转换为xml文件

Java 如何使用spring批处理将数据库结果集转换为xml文件,java,spring,jaxb,spring-batch,resultset,Java,Spring,Jaxb,Spring Batch,Resultset,我有如下spring批处理配置xml。如果我使用行映射器方法,它一次处理一个结果集。但我需要处理10个结果集,以便将其生成一个xml文件。结果集的前半部分将包含所有10个结果集的相同结果。十个结果集的另一半将指向不同的地址值。根据每个id,我需要提供十套地址。每个提供者可以有5个地址。我认为行映射器不适合这种情况。请建议合适的解决方案 <bean id="pagingItemReader" class="org.springframework.batch.item.data

我有如下spring批处理配置xml。如果我使用行映射器方法,它一次处理一个结果集。但我需要处理10个结果集,以便将其生成一个xml文件。结果集的前半部分将包含所有10个结果集的相同结果。十个结果集的另一半将指向不同的地址值。根据每个id,我需要提供十套地址。每个提供者可以有5个地址。我认为行映射器不适合这种情况。请建议合适的解决方案

<bean id="pagingItemReader"
        class="org.springframework.batch.item.database.JdbcPagingItemReader"
        scope="step">
        <property name="dataSource" ref="dataSource" />
        <property name="queryProvider">
          <bean
            class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="selectClause" value="select *" />
            <property name="fromClause" value="from extract_VIEW" />
             <property name="sortKey" value="PR_EXTRCT_ID" /> 
          </bean>
        </property>
            <property name="pageSize" value="100" />
        <property name="rowMapper">
            <bean class="com.pr.comp.PrdrDataExtractRowMapper" />
        </property>
      </bean>
    <bean id="xmlItemWriter" class="com.PR.comp.IndentingStaxEventItemWriter">
        <property name="resource"  value="file:xml1/output/pre1.xml" />
        <property name="encoding" value="UTF-8" />
        <property name="version" value="1.0" />
        <property name="marshaller" ref="reportMarshaller" />
        <property name="rootTagName" value="PrDtaReqst1"/> 
        <!-- TRUE means, that output file will be overwritten if exists - default is TRUE -->
        <property name="overwriteOutput" value="true" />
    </bean>

     <bean id="reportMarshaller"
            class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
            <property name="classesToBeBound">
                <value>com.pr.comp.model.jaxb.some.PrDataRequest</value>
            </property>`enter code here`
        </bean> 

        <batch:job id="someprocessingJob">
            <batch:step id="step1">
                <batch:tasklet>
                    <!-- <batch:chunk reader="dbItemReader" -->
                    <batch:chunk reader="pagingItemReader"
                        processor="itemProcessor"
                        writer="xmlItemWriter" 
                        commit-interval="100" />
                </batch:tasklet>
            </batch:step>
        </batch:job>

com.pr.comp.model.jaxb.some.PrDataRequest
`在这里输入代码`
我需要如下输出

    <root element>
     <Header>
        <HeaderCode></HeaderCode>       
      </Header>
      <PrDetailsRequest>
        <UniqueIdentifier>1</UniqueIdentifier>
          <PersonGroupName>
          <FirstName></FirstName>
          <MiddleInitialName></MiddleInitialName>
          <LastName> mm</LastName>
        </PersonGroupName>   
        <PrStatus>active</PrStatus>
        <prAddress>
          <AddressLine1>address1</AddressLine1>
          <AddressLine2>address2</AddressLine2>
          <CityName>everett</CityName>
          <State>WA</State>
          <Zip>2222</Zip>
          <CountryCode></CountryCode>
          <PhoneNumber>2222222222</PhoneNumber>         
          <Suffix>suffix</Suffix>
          <indicator>N</indicator>
        </prAddress>
        <prAddress>
          <AddressLine1>address21</AddressLine1>
          <AddressLine2>address22</AddressLine2>
          <CityName>everett</CityName>
          <State>WA</State>
          <Zip>2222</Zip>
          <CountryCode></CountryCode>
          <PhoneNumber>6666622</PhoneNumber>         
          <Suffix>suffix</Suffix>
          <indicator>N</indicator>
        </prAddress><prAddress>
          <AddressLine1>address23</AddressLine1>
          <AddressLine2>address24</AddressLine2>
          <CityName>everett</CityName>
          <State>WA</State>
          <Zip>2222</Zip>
          <CountryCode></CountryCode>
          <PhoneNumber>2222222222</PhoneNumber>         
          <Suffix>suffix</Suffix>
          <indicator>N</indicator>        
          </rootelement>    

1.
嗯
积极的
地址1
地址2
埃弗里特
华盛顿州
2222
2222222222
后缀
N
地址21
地址22
埃弗里特
华盛顿州
2222
6666622
后缀
N
地址23
地址24
埃弗里特
华盛顿州
2222
2222222222
后缀
N

我碰巧编写了一个基于。它似乎适合您的用例。您需要创建一个表示XML模式根元素的模型类
,以及一个与
对应的
类型。
pagingItemReader
返回的行属于
RECORD
类型(例如,可以是包含每行键值对的
Map
)。然后您需要注入两个lambda:

  • keyExtractor
    从每个
    记录中提取唯一标识符
  • itemUpdater
    从下一条
    记录更新正在构建的

我希望提供的测试用例有助于理解它是如何工作的。

它不是在处理一个结果集,而是在处理结果集中的一行。
ResultSet
是查询的整个结果集。是的,您是对的。它正在处理ResultSet中的一行