Mule DB连接器参数化查询

时间:2019-01-20 23:44:54

标签: database mule connector parameterized-query

这是我第一次体验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

2 个答案:

答案 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)

  1. 您可能需要在流中实时获取这些值。要重新使用它们,请通过流变量进行捕获。 当我们具有查询参数中的动态值时,可以通过变量名originalQueryParams捕获它。

def inputRequest = message.getInvocationProperty('originalQueryParams'); message.setInvocationProperty('country',inputRequest.country); return payload;

  1. 使用groovy脚本捕获这些变量并通过设置调用属性将它们分开。

    select * from employees where employee_country = '#[flowVars.country]'

  2. 现在“国家/地区”是您的流量变量,并将其传递给查询。

    <cfqueryparam>

希望这会有所帮助