2015-10-27 3 views
0

Я прочитал в документации here чтоВерблюд - верблюд-SQL пакетной вставки с помощью useMessageBodyForSql

«Если партия установлена ​​верно, то интерпретация въездного тела сообщения изменяется незначительно - вместо итератора параметров, в компонент ожидает итератор, содержащий итераторы параметров, размер внешнего итератора определяет размер партии. "

«Начиная с версии Camel 2.16 вы можете использовать опцию useMessageBodyForSql, которая позволяет использовать тело сообщения в качестве оператора SQL, а затем параметры SQL должны быть предоставлены в заголовке с ключом SqlConstants.SQL_PARAMETERS. Это позволяет компоненту 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

Когда вы используете sql, он вызывает несколько операторов вставки для обработки один за другим. Попробуйте использовать orm как mybatis или ibatis.

Даже вы можете создать класс dao. Вызвать sqlSession передать все значения карты в orm для вставки в виде пакета.

+0

Я не думаю, что это правда. batch = true использует пакетные вставки, для этого не нужно использовать mybatis или ibatis. Проблема в том, что useMessageBodyForSql и batch = true работают плохо. – DKIT

 Смежные вопросы

  • Нет связанных вопросов^_^