我需要创建动态查询,其中where条件将根据进入mule的请求进行更改。请求将始终使用查询参数获取。这是一个例子: http://localhost:8084/basePath?name=balwant&age=26,或 http://localhost:8084/basePath?name=balwant&age=26&gender=M
同样它也是动态的。现在我需要一种方法来创建一个查询,根据请求中的查询参数添加WHERE条件。
答案 0 :(得分:2)
Haven没有测试过这个,但是这样的话。检查inboundProperty是否存在并以编程方式构建查询:
SELECT * FROM USERS WHERE NAME = '#[message.inboundProperties.name]' #[message.inboundProperties.gender !=null ? ' AND GENDER=' + message.inboundProperties.gender] #[message.inboundProperties.age !=null ? ' AND AGE=' + message.inboundProperties.age]
答案 1 :(得分:0)
我在使用Custom Transformers时考虑过这一点。所以我用java变压器。
逻辑看起来像这样:
public class QueryBuilder extends AbstractMessageTransformer {
@Override
public Object transformMessage(MuleMessage message, String outputEncoding)
throws TransformerException {
System.out.println("Query Params : "
+ message.getInboundProperty("http.query.params").getClass()
.getName());
Map<?, ?> map = message.getInboundProperty("http.query.params");
System.out.println("Map keys : " + map.keySet());
String where = "";
for (Map.Entry<?, ?> entry : map.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
where = where+" "+entry.getKey()+"="+"'"+entry.getValue()+"'"+" and";
}
String whereCondition = where.substring(0, where.lastIndexOf(" "));
System.out.println("Where condition is : "+ where.substring(0, where.lastIndexOf(" ")));
return whereCondition;
}}
现在返回字符串类型的有效负载。
在数据库连接器中,选择查询类型为动态。在 WHERE 条件之后添加#[payload] 。
干杯
答案 2 :(得分:-1)
如果值在消息入站属性中可用,则上述查询有效。但是如果你想用请求查询参数值构建SQL查询,那么你需要使用如下所示(因为查询参数值将在mule 3.6.0以后的消息入站属性http.query.param下可用)
SELECT * FROM USERS WHERE NAME = '#[message.inboundProperties.'http.query.params'.name]' #[message.inboundProperties.'http.query.params'.gender !=null ? ' AND GENDER=' + message.inboundProperties.'http.query.params'.gender] #[message.inboundProperties.'http.query.params'.age !=null ? ' AND AGE=' + message.inboundProperties.'http.query.params'.age]