我在文档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");
正文是与参数列表匹配的键/值的映射。
这有效,但不如预期。
逐行插入每一行,而不是预期的批量插入。这种选择组合甚至可能吗?
如果不可能,那么实现这一目标的另一种方法是什么?
答案 0 :(得分:0)
当你使用sql时,它会触发多个insert语句来一个接一个地处理。尝试使用像mybatis或ibatis这样的orm。
即使你可以创建一个dao类。调用sqlSession将所有映射值传递给orm以作为批处理插入。