Mule-通过DB连接器为sql查询创建动态where条件

时间:2015-10-16 15:09:14

标签: java mule

我需要创建动态查询,其中where条件将根据进入mule的请求进行更改。请求将始终使用查询参数获取。这是一个例子: http://localhost:8084/basePath?name=balwant&age=26,或 http://localhost:8084/basePath?name=balwant&age=26&gender=M

同样它也是动态的。现在我需要一种方法来创建一个查询,根据请求中的查询参数添加WHERE条件。

3 个答案:

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