在使用骆驼的项目中,使用骆驼sql组件似乎是一件好事。但是我看不到需要动态SQL的情况的意义。用例: 前端用户可以
我尝试使用动态sql找出了三个选择: 1.使用收件人列表,以便在运行时选择路由,似乎已被终止。 2.使用主体作为sql并使用useMessageBodyForSql = true 3.使用自定义的prepareStatementStrategy
对于2和3,我无法发送参数名称或将标头或属性指定为在Prepared语句中使用的值的一部分。
对于.2。必须给像这样的sql: 从t1中选择c1,c2 ...,其中x =?和y =?
,然后是Java util列表,其值按顺序排列。
所以-使用此功能有什么好处吗? sql组件的任何功能都比直接使用它使用的spring jdbc模板好用吗?
答案 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进行高级模板化,但这在编码和配置方面要高得多。