如何为Spring Integration JDBC出站通道适配器创建动态查询?

时间:2013-06-09 01:05:01

标签: spring spring-integration spring-jdbc

我需要创建一个由jdbc:outbound-channel-adapter执行的动态更新语句,因为我需要使用具有可变条件数的case表达式设置一个字段,如下所示:

UPDATE tableA
SET    fieldA = CASE
                   WHEN fieldB IN ('a','b') THEN 1
                   WHEN fieldB IN ('c','d') THEN 2
                   ...
                   WHEN fieldB IN (...) THEN N
                END
WHERE  fieldC = :headers[MY_FIELDC]

我可以在Spring表达式中创建这个动态更新语句,如下所示:

"'UPDATE tableA SET fieldA = ' + headers[MY_CASE_EXP] + ' WHERE fieldC = :headers[MY_FIELDC]'"

但查询属性似乎不支持Spring表达式。

如何生成供jdbc:outbound-channel-adapter使用的动态查询?

1 个答案:

答案 0 :(得分:2)

要动态创建查询,您需要使用ExpressionEvaluatingSqlParameterSourceFactory,如下所示:

<jdbc:outbound-channel-adapter data-source="dataSource" channel="outboundJdbcChannelOne"
    query="UPDATE tableA SET fieldA = :something WHERE fieldC = :somethingElse"
    sql-parameter-source-factory="spelSource"/>

<bean id="spelSource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
    <property name="parameterExpressions">
        <map>
            <entry key="something" value="headers['MY_CASE_EXP']"/>
            <entry key="somethingElse" value="headers['MY_FIELDC']"/>
        </map>
    </property>
</bean>

有关详细信息,请参阅Spring参考文档中的this section

相关问题