gpt4 book ai didi

playframework - Ebean:用 OR 连接多个表达式

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

我使用 PLAY Framework 2.2.1,我想构建一个查询来搜索数据库以查找我从输入表单中获得的术语。

这是我到目前为止所得到的,但它不起作用:

...
List<String> terms;
public static Model.Finder<Integer, XYZ> find = new Model.Finder<Integer, XYZ.class>(Integer.class, XYZ.class);
ExpressionList<XYZ> el = XYZ.find.where();

for(String term : terms){
el.add(Expr.ilike("name", term + "%"));
}

List<XYZ> results = XYZ.find.where().add(el.disjunction()).findList();

我不知道如何使用 OR 添加和连接多个表达式到我的查询。

最佳答案

我认为您可以使用自定义查询(如 select sample 中所示)最快地做到这一点

com.avaje.ebean.Query<Xyz> query = com.avaje.ebean.Ebean.createQuery(Xyz.class);
query.where("lower(first_name) like :first_name OR lower(last_name) like :last_name ")
.setParameter("first_name", "John".toLowerCase()+"%")
.setParameter("last_name", "Doe".toLowerCase() + "%");

List<Xyz> xyzList = query.findList();

您还可以使用带编号的参数进行更高级的组合,即:

List<String> sqlList = new ArrayList<>();
List<Object> paramsList = new ArrayList<>();


sqlList.add("lower(first_name) like ?");
paramsList.add("John".toLowerCase() + "%");

sqlList.add("lower(last_name) like ?");
paramsList.add("John".toLowerCase() + "%");

if (optionallyCheckTheNick) {
sqlList.add("lower(nick) like ?");
paramsList.add("johnie".toLowerCase() + "%");
}


Query<Xyz> query = Ebean.createQuery(Xyz.class);
query.where(StringUtils.join(sqlList, " OR "));

int i = 1; // first param uses index 1 NOT 0!
for (Object param : paramsList) {
query.setParameter(i, param);
i++;
}


List<Xyz> xyzList = query.findList()

只需确保您总是成对地添加到 sqlListparamsList!

关于playframework - Ebean:用 OR 连接多个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194312/

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