骆驼SQL与为动态SQL调用自己的bean(可变列where子句)

时间:2019-04-04 23:39:15

标签: apache-camel

在使用骆驼的项目中,使用骆驼sql组件似乎是一件好事。但是我看不到需要动态SQL的情况的意义。用例:  前端用户可以

  1. 仅选择一种记录类型并提交搜索,在这种情况下,子句为:“ from table1 where col1 = valueX1”
    1. 还要选择要约开始日期的日期范围,以便where子句看起来像“来自table1,其中col1 = valueX1和(...)之间的dateCol”
    2. 对于其他用户界面,依此类推,如果给定的值总共有10个不同的列(以不同的组合)

我尝试使用动态sql找出了三个选择: 1.使用收件人列表,以便在运行时选择路由,似乎已被终止。 2.使用主体作为sql并使用useMessageBodyForSql = true 3.使用自定义的prepareStatementStrategy

对于2和3,我无法发送参数名称或将标头或属性指定为在Prepared语句中使用的值的一部分。

对于.2。必须给像这样的sql: 从t1中选择c1,c2 ...,其中x =?和y =?

,然后是Java util列表,其值按顺序排列。

所以-使用此功能有什么好处吗? sql组件的任何功能都比直接使用它使用的spring jdbc模板好用吗?

1 个答案:

答案 0 :(得分:0)

我建议使用Camel Templating来使语句具有动态性:

to("freemarker://sql/template.ftl")
.log("${body}")
.to("sql:ignored?useMessageBodyForSql=true");

请注意,如果语句来自正文,则查询参数用?而不是#符号表示:

-- sql/template.ftl
select count(*) as count
  from a_table
<#if headers.namePattern?has_content>
 where name like :?namePattern
</#if>

您还可以切换到MyBatis component,它支持通过MyBatis进行高级模板化,但这在编码和配置方面要高得多。