Camel - 使用useMessageBodyForSql进行camel-sql批量插入

时间:2015-10-27 10:23:18

标签: java apache-camel camel-jdbc camel-sql

我在文档here中读到了

"如果batch设置为true,那么入站消息体的解释会稍微改变 - 而不是参数的迭代器,组件需要一个包含参数迭代器的迭代器;外迭代器的大小决定批量大小。"

"从Camel 2.16开始,您可以使用允许使用消息正文作为SQL语句的选项useMessageBodyForSql,然后必须在包含密钥SqlConstants.SQL_PARAMETERS的标头中提供SQL参数。这允许SQL组件在SQL查询来自邮件正文时更加动态。"

我有以下路线:

  from("direct:processLine")
            .setHeader(SqlConstants.SQL_PARAMETERS, simple("${body}"))
            .setBody(constant("INSERT INTO SOME_TABLE "
                    " (Param1, Param2) " +
                    " values " +
                    " (:?Param1,:?Param2)"))
            .to("sql://query?useMessageBodyForSql=true&batch=true&dataSource=dataSource");

正文是与参数列表匹配的键/值的映射。

这有效,但不如预期。

逐行插入每一行,而不是预期的批量插入。这种选择组合甚至可能吗?

如果不可能,那么实现这一目标的另一种方法是什么?

1 个答案:

答案 0 :(得分:0)

当你使用sql时,它会触发多个insert语句来一个接一个地处理。尝试使用像mybatis或ibatis这样的orm。

即使你可以创建一个dao类。调用sqlSession将所有映射值传递给orm以作为批处理插入。