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");