Database Mule DB连接器参数化查询

Database Mule DB连接器参数化查询,database,mule,connector,parameterized-query,Database,Mule,Connector,Parameterized Query,这是我第一次体验Mule&试图用DB连接器定义一个流。我正在定义一个带有3个参数的参数化简单select查询,但不知怎么搞不懂。甚至在将变量值传递给查询之前,我也尝试将整个/部分查询放入变量中,但未能成功。非常感谢您的帮助 select * from employees where employee_country='UK' limit 1,10; 在这里,UK、1和10是动态值,将来自UI,如下所示 我的尝试: select * from employees where employee_

这是我第一次体验Mule&试图用DB连接器定义一个流。我正在定义一个带有3个参数的参数化简单select查询,但不知怎么搞不懂。甚至在将变量值传递给查询之前,我也尝试将整个/部分查询放入变量中,但未能成功。非常感谢您的帮助

select * from employees where employee_country='UK' limit 1,10; 
在这里,UK、1和10是动态值,将来自UI,如下所示

我的尝试:

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]

Thanx,-Swapnil

您正在尝试创建一个动态查询。对于参数化查询,应使用占位符分隔参数值。参数化不会替换表达式

以下是两个选项之间的区别:

<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>
以下是解释差异的文档:

参数化是推荐的方法,因为使用动态查询语句的缺点是安全性,因为它使语句为SQL注入打开

您可能需要在流中实时使用这些值。要重用它们,请通过流变量捕获。 当查询参数中有动态值时..通过变量名originalQueryParams捕获它 [message.inboundProperties.'http.query.params']

使用groovy脚本捕获这些变量,并通过设置调用属性将它们分离

def inputRequest=message.getInvocationProperty'originalQueryParams'; message.setInvocationProperty'country',inputRequest.country; 返回有效载荷

现在Country是您的流变量,并在查询中传递它

从员工所在国家/地区=“[flowVars.country]”的员工中选择*

希望这有帮助