gpt4 book ai didi

ebean - 用 "or"或 "and"连接两个表达式列表

转载 作者:行者123 更新时间:2023-12-04 22:06:46 25 4
gpt4 key购买 nike

我在用“或”连接 2 expressionList 时遇到了一些麻烦。
这是我正在做的一个例子:

RelationGroup prg =...
ExpressionList<User> exp = User.find.where();
List<ExpressionList<User>> expressions = new ArrayList<ExpressionList<User>>()
List<String> relations = new ArrayList<String>()

while(prg != null){

if(prg.prevGroupRelation != null)
relations.add(prg.prevGroupRelation);

for(RelationAtt pra : prg.prAtt){
if(pra.rel.equals("eq"))
exp = exp.eq(pra.name, pra.value1 );
else if(pra.rel.equals("lt"))
exp = exp.lt(pra.name, pra.value1);
else if(pra.rel.equals("gt"))
exp = exp.gt(pra.name, pra.value1);
else if(pra.rel.equals("bw"))
exp = exp.gt(pra.name, pra.value1).lt(pra.name, pra.value2);
}

expression.add(exp);
prg=prg.nextPRG();
exp = new ExpressionList<User>();
}

for(i=0;i<expressions.count-1; i++)
if(relations[i].equals("or")){
//ToDo: (expressions[i]) or (expressions[i+1])
}else{
//ToDo: (expressions[i]) and (expressions[i+1])
}

我需要有类似的东西:
select *
from tableName
where (varName1=value and varName2=value) or (varName3) or (varName4=value and varName5=value)

这是完全动态的,因此 varNames 可以是当前存在的任何一个(因为查询是由用户使用网页界面构建的),所以我不能那么容易地使用原始 SQL。现在我需要用 or/and 加入 prevExp 和 exp 并替换 exp。 ExpressionList.or(exp, exp)接收 2 个表达式。
感谢您对此的任何帮助

最佳答案

您需要check out the Ebean Junctions特征。

连接有两种,连接和分离。使用连词,您可以使用 AND 将多个表达式连接在一起,使用 Disjunction,您可以使用 OR 将多个表达式连接在一起。

例如:

Query q = Ebean.createQuery(YourClass.class);
q.where().disjunction()
.add(Expr.eq("varName1",value).eq("varName2",value))
.add(Expr.eq("varName3",value3))
.add(Expr.eq("varName4",value4).eq("varName5",value5))

生成这样的sql:
SELECT * FROM tablename WHERE (varName1=value and varName2=value) or (varName3=value3) or (varName4=value4 and varName5=value5)

如果您想要灵活选择连接类型,您可以这样做:
Query q = Ebean.createQuery(YourClass.class);
Junction<YourClass> junction;

if("or".equals(desiredJunctionType)){
junction = query.where().disjunction();
} else {
junction = query.where().conjunction();
}

// then you can add your expressions:
junction.add(Expr.eq("varName1",value).eq("varName2",value));
junction.add(Expr.eq("varName3",value3));
// etc...
// and finaly get the query results
List<YourClass> yourResult = junction.query().findList();

关于ebean - 用 "or"或 "and"连接两个表达式列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10995253/

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