【问题标题】:Spring Integration jdbc stored procedure custom rowmapperSpring集成jdbc存储过程自定义rowmapper
【发布时间】:2016-03-09 15:23:31
【问题描述】:

我是 Spring Integration 的新手,正在使用 Spring 4.2.4。 我正在尝试使用 jdbc:stored-proc-outbound-gateway 调用存储过程。我已经在使用弹簧 jdbc。

存储过程正在返回光标,并且正在使用 customRowMapper,如下所示

 new SqlOutParameter(A_RC, OracleTypes.CURSOR, null, new MyCustomDataExtractor())

MyCustomDataExtractor 实现 SqlReturnType 并返回自定义对象。

现在的问题是如何在我的代码的 SI jdbc 存储的 proc.piece 中实现这一点..

    ...
<int-jdbc:sql-parameter-definition name="A_RC" type="#{T(oracle.jdbc.OracleTypes).CURSOR}" direction="OUT"/>
...
 <int-jdbc:returning-resultset name="A_RC" row-mapper="a.b.c.MyCustomDataExtractor"/>
...

Spring 期望这是一个行映射器。我应该在这里使用任何变压器吗?请指教。 注意:我必须返回多个结果集。

【问题讨论】:

    标签: spring-integration spring-jdbc


    【解决方案1】:

    实际上,使用CURSOR 类型,您可以只使用returning-resultsetRowMapper 实现。

    这样您就无需担心任何SqlReturnType,只需将该行直接映射到您的域对象。

    我什至确信您可以将您的 MyCustomDataExtractor 修改为 RowMapper 合同。

    注意:使用returning-resultset 定义,您不需要 为相同的OUT 参数指定sql-parameter-definition。该组件将它们正确识别为OutParameter

    而且,是的,您可以为 CURSOR 参数设置多个 returning-resultset

    【讨论】:

    • 感谢 Bilan 的回复,实际上 MyCustomDataExtractor 有业务分组,它返回 Map 而不是对象列表(RowMapper)。提供了我已经实施的解决方案..
    【解决方案2】:

    我在 sql-parameter-definition 中添加了返回类型并删除了返回结果集。

    <int-jdbc:sql-parameter-definition name="A_RC" type="#{T(oracle.jdbc.OracleTypes).CURSOR}" direction="OUT" return-type="ed"/>
    

    这里的“ed”只不过是 a.b.c.MyCustomDataExtractor 的 bean 引用。

    <bean id="ed" class="a.b.c.MyCustomDataExtractor"/>
    

    【讨论】:

    • 对不起。它是您问题的答案吗?然后请以适当的方式形成它,以帮助其他有同样问题的人。
    • 根据您的评论添加了 sn-p..:)
    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 2012-09-05
    • 2023-03-05
    • 2020-04-20
    • 2012-07-12
    • 2017-06-30
    • 2015-10-03
    • 2014-06-05
    相关资源
    最近更新 更多