这是我第一次体验Mule,并尝试使用DB连接器定义流。我正在定义一个带有3个参数的带参数的简单选择查询,但是以某种方式无法弄清楚。即使在将变量值传递给查询之前,我也尝试将全部/部分查询放入Variable中,但无法成功。我们非常感谢您的帮助。
select * from employees where employee_country='UK' limit 1,10;
此处的英国1和10是动态值,它们将通过如下http://localhost:9090/employee?country=UK&start=1&limit=10
来自用户界面我的尝试:
select * from employees where employee_country=#[message.inboundProperties.'http.query.params'.country] limit #[message.inboundProperties.'http.query.params'.start],#[message.inboundProperties.'http.query.params'.limit]
感谢,-Swapnil
答案 0 :(得分:1)
您正在尝试创建动态查询。对于参数化查询,应使用占位符分隔参数值。参数化不会替换表达式。
这是两个选项之间的区别:
<db:select config-ref="DBConfig" doc:name="Database">
<db:parameterized-query><![CDATA[select * from employees where employee_country= :country limit 1,10;]]></db:parameterized-query>
<db:in-param name="country" type="VARCHAR" value="#[message.inboundProperties.'http.query.params'.country]" />
</db:select>
动态:
<db:select config-ref="DBConfig" doc:name="Database">
<db:dynamic-query><![CDATA[select * from employees where employee_country=#[message.inboundProperties.'http.query.params'.country] limit #[message.inboundProperties.'http.query.params'.start],#[message.inboundProperties.'http.query.params'.limit]]]></db:dynamic-query>
</db:select>
以下是说明差异的文档:
https://docs.mulesoft.com/mule-runtime/3.7/database-connector#query-types
建议使用参数化,因为使用动态查询语句的缺点是安全性,因为它使该语句可用于SQL注入。
答案 1 :(得分:-1)
def inputRequest = message.getInvocationProperty('originalQueryParams');
message.setInvocationProperty('country',inputRequest.country);
return payload;
使用groovy脚本捕获这些变量并通过设置调用属性将它们分开。
select * from employees where employee_country = '#[flowVars.country]'
现在“国家/地区”是您的流量变量,并将其传递给查询。
<cfqueryparam>
希望这会有所帮助