325.12. 動的な値での IN クエリーの使用

Camel 2.17 以降で利用可能

Camel 2.17 以降、SQL プロデューサーは、IN 値が動的に計算される IN ステートメントで SQL クエリーを使用できるようにします。たとえば、メッセージ本文やヘッダーなどから。

IN を使用するには、次のことが必要です。

  • パラメーター名の前に in:
  • パラメーターの前後に ( ) を追加します

例はこれをよりよく説明しています。次のクエリーが使用されます。

-- this is a comment
select *
from projects
where project in (:#in:names)
order by id

次の経路で:

from("direct:query")
    .to("sql:classpath:sql/selectProjectsIn.sql")
    .to("log:query")
    .to("mock:query");

次に、IN クエリーは、次のような動的な値を持つキー名を持つヘッダーを使用できます。

// use an array
template.requestBodyAndHeader("direct:query", "Hi there!", "names", new String[]{"Camel", "AMQ"});

// use a list
List<String> names = new ArrayList<String>();
names.add("Camel");
names.add("AMQ");

template.requestBodyAndHeader("direct:query", "Hi there!", "names", names);

// use a string separated values with comma
template.requestBodyAndHeader("direct:query", "Hi there!", "names", "Camel,AMQ");

クエリーは、外部化する代わりにエンドポイントで指定することもできます (外部化すると SQL クエリーの維持が容易になることに注意してください)。

from("direct:query")
    .to("sql:select * from projects where project in (:#in:names) order by id")
    .to("log:query")
    .to("mock:query");