66.13. 使用带有动态值的 IN 查询
SQL producer 允许使用带有 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");