使用 apache camel 在 mybatis 中选择对象列表

Make a selects for list of object in mybatis using apache camel

假设我有一个对象列表,xml 如下所示:

<people>
    <names>
        <name>Martin</name>
        <name>Kassed</name>
        <name>Billy</name>
        <name>Mark</name>
        <name>Bob</name>
    </names>
</people>

预期输出:

<people>
    <surnames>
        <surname>Kentucky</surname>
        <surname>Snow</surname>
        <surname>Arm</surname>
        <surname>Potter</surname>
        <surname>Dawn</surname>
    </surnames>
</people>

我的意思是我想对每个名称元素使用查询。

我的问题清楚了吗?

您需要将其与 xpath 组件拆分,然后聚合所有请求以重建 xml。

<route id="route">
            <from  uri="direct:start"/>
            <log  message="xml input : ${body}"/>

          <split>
                <xpath>/people/names</xpath>
                <log message="split data :  ${body}"/>
                <select id="selectAllAccounts"> select name from USER </select>
                <to uri="mybatis:selectUserName"/>
                <to uri="direct:aggregateQueries"/>
          </split>
</route>

<route>
  <from uri="direct:aggregateQueries"/>
  <aggregate strategyRef="aggrTask" completionInterval="8000" >
    <correlationExpression>
      <xpath>//te:Order</xpath>
    </correlationExpression>

    <setBody"><simple><people><surnames>${body}</people></surnames></simple></setBody>  
  </aggregate>
</route>  

连接字符串的聚合器策略:

  public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { 
            if (oldExchange == null) { 
                return newExchange; // first message
            } 

            String oldBody = oldExchange.getIn().getBody(String.class); 
            String newBody = newExchange.getIn().getBody(String.class); 
            oldExchange.getIn().setBody(oldBody + "+" + newBody); 
            return oldExchange; 
        }