当前位置: 首页 > 知识库问答 >
问题:

动态条件查询

南宫才艺
2023-03-14

大家好,我试着做一个方法来应用条件一个SelectQuery,但我不知道如何通过名称获得字段或通过名称获得表,代码示例...

[{'field': 'ID', 'condition' : 'in', 'value' : ['f4019bc3-d06b-4673-87e7-75bab23ac85a','c13beeef-2893-4a04-9ebf-ecdc851475bc']}]
public List<Branch> find(String order, JSONArray filters, Integer limit, Integer pageNumber) {
    SelectQuery<Record6<String,Integer,String,String,String,String>> selectSentence = dsl.select(
            branch.ID.as("id"),
            branch.CODE.as("code"), 
            branch.NAME.as("name"), 
            enterprises.ID.as("enterprise.id"), 
            enterprises.NAME.as("enterprise.name"), 
            enterprises.NIT.as("enterprise.nit"))
            .from(branch)
            .leftOuterJoin(enterprises)
            .on(branch.ENTERPRISE.eq(enterprises.ID)).getQuery();
    if(order != null && order.startsWith("-")) {
            selectSentence.addOrderBy(Tables.BRANCH.field(order.substring(1)).desc());
    }else {
            selectSentence.addOrderBy(Tables.BRANCH.field(order).asc());
    }
    addQueryConditions(filters, selectSentence);
    selectSentence.addLimit(limit);
    selectSentence.addOffset((pageNumber - 1) * limit);
    return selectSentence.fetchInto(Branch.class);
}
@SuppressWarnings("unchecked")
private void addQueryConditions(JSONArray filters, SelectQuery<?> query) {
    for (int i = 0, size = filters.length(); i < size; i++){
        JSONObject filter = filters.getJSONObject(i);
        String filterCondition = filter.optString("condition");
        if(Comparator.EQUALS.toSQL().equals(filterCondition)) {
            Field<Object> field = (Field<Object>) query.field(filter.optString("field"));
            Comparator comparator = Comparator.EQUALS;
            query.addConditions(field.compare(comparator, filter.optString("value")));
        }else if(Comparator.GREATER.toSQL().equals(filterCondition)) {
            Field<Object> field = (Field<Object>) query.field(filter.optString("field"));
            Comparator comparator = Comparator.GREATER;
            query.addConditions(field.compare(comparator, filter.optString("value")));
        }else if(Comparator.GREATER_OR_EQUAL.toSQL().equals(filterCondition)) {
            Field<Object> field = (Field<Object>) query.field(filter.optString("field"));
            Comparator comparator = Comparator.GREATER_OR_EQUAL;
            query.addConditions(field.compare(comparator, filter.optString("value")));
        }else if(Comparator.IN.toSQL().equals(filterCondition)) {
            Field<Object> field = (Field<Object>) query.field(filter.optString("field"));
            Comparator comparator = Comparator.IN;
            query.addConditions(field.compare(comparator, filter.optString("value")));
        }else if(Comparator.LESS.toSQL().equals(filterCondition)) {
            Field<Object> field = (Field<Object>) query.field(filter.optString("field"));
            Comparator comparator = Comparator.LESS;
            query.addConditions(field.compare(comparator, filter.optString("value")));
        }else if(Comparator.LESS_OR_EQUAL.toSQL().equals(filterCondition)) {
            Field<Object> field = (Field<Object>) query.field(filter.optString("field"));
            Comparator comparator = Comparator.LESS_OR_EQUAL;
            query.addConditions(field.compare(comparator, filter.optString("value")));
        }else if(Comparator.LIKE.toSQL().equals(filterCondition)) {
            Field<Object> field = (Field<Object>) query.field(filter.optString("field"));
            Comparator comparator = Comparator.LIKE;
            query.addConditions(field.compare(comparator, filter.optString("value")));
        }
    }
}

但字段总是空的...

我怎么解决这个。

共有1个答案

柯瀚海
2023-03-14

各种tablelike.field(String)方法区分大小写。您的JSON结构发送以下输入

javascript prettyprint-override">[{'field': 'ID', ...}]

但是您的列被重命名为小写的ID:

branch.ID.as("id")
 类似资料:
  • 现在我扪心自问,是不是有什么“点符号”或者其他什么东西让这个案例变得可有可无。在E。例如:本机SQL我会做一些事情,比如创建一个子查询,并从内部投影中选择所有别名值()。 如果有任何建议,我将不胜感激。

  • 问题内容: 我需要从xml构造我的sql查询的部分条件。 我有一个类似XML: 因此,我需要提取属性为TIPO =“ MC”的条件;我使用以下代码: 现在,假设我的查询是: 我需要替换循环XML的“ @@ USU_CODICIONESX”,但不使用游标,也许要使用cte。 预期结果是: 问题答案: 您需要动态创建一个SQL语句,然后运行该命令 或使用COALESCE / ISNULL函数进行字符串

  • 致: 我怎么能这么做?

  • 本文向大家介绍JPA多条件复杂SQL动态分页查询功能,包括了JPA多条件复杂SQL动态分页查询功能的使用技巧和注意事项,需要的朋友参考一下 概述   ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式。 环境 springBoot IDEA2017.3.4 JDK8 pom.x

  • v3.0开始,herosphp 提供了一套全新的设置查询条件的接口: MysqlModel::where($field, $opt, $value); 参数名称 参数类型 参数说明 $field string OR function 字段名称, 如果传入的是 function 的话,则说明是闭包. 闭包传入的是一组查询条件。 $opt string 操作符,如果不传入 $value 的情况下,$o

  • 任何帮助都很感激! 编辑