gpt4 book ai didi

java - JOOQ动态条件查询

转载 作者:行者123 更新时间:2023-11-30 02:11:19 25 4
gpt4 key购买 nike

大家好,我尝试制定一种方法来应用 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);
}

addQueryConditions 看起来像:

@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")));
}
}
}

但该字段总是为空...

我该如何解决这个问题。

最佳答案

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

[{'field': 'ID', ...}]

但是您的列已重命名为小写id:

branch.ID.as("id")

关于java - JOOQ动态条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50012334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com