Red Hat Training
A Red Hat training course is available for Red Hat Fuse
304.9.3. 動的値での IN クエリーの使用
Camel 2.17 から利用可能
Camel 2.17 以降では、SQL プロデューサーは IN 値が動的に計算される IN ステートメントで SQL クエリーを使用できます。たとえば、メッセージボディーやヘッダーなどです。
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");