46.13. 使用带有动态值的 IN 查询
SQL producer 允许在动态计算 IN 语句中使用 SQL 查询。例如,邮件正文或标题等。
要使用需要满足的要求:
-
为参数名称添加前缀,
其中: -
在参数后面添加
()
一个示例可以更好地说明。使用以下查询:
-- 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");