栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ORMLite中的多个组合OR条件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ORMLite中的多个组合OR条件

如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。

在ORMLite

Where.or(Where<T, ID> left, Where<T, ID>right, Where<T, ID>... others)
中有一点语法上的缺陷。您打电话的时候:

w.or(    w.gt("x", 1).and().lt("x", 100),    w.gt("x", 250).and().lt("x", 300));

or()
方法得到的是:

w.or(w, w);

您确实可以将其重写为:

w.gt("x", 1).and().lt("x", 100);w.gt("x", 250).and().lt("x", 300);w.or(w, w);

or
那里的方法仅使用参数来计算它需要从堆栈中弹出多少个子句。当你打电话
gt
,并
lt
和其他人,其在推的条款堆项目。该
and()
方法从堆栈中取出1个项目,然后在将来取出另一个项目。我们进行这些语法修改是因为我们要支持基于线性,链接和参数的查询:

w.gt("x", 1);w.and();w.lt("x", 100);

与:

w.gt("x", 1).and().lt("x", 100);

与:

w.and(w.gt("x", 1), w.lt("x", 100));

但这意味着您可以使用Where.or(int many)方法极大地简化代码。因此,在

or
上面的示例中还可以是:

w.gt("x", 1).and().lt("x", 100);w.gt("x", 250).and().lt("x", 300);// create an OR statement from the last 2 clauses on the stackw.or(2);

因此,您根本不需要

conditions
列表。您只需要一个柜台。因此,您可以执行以下操作:

int clauseC = 0;for (int i : values) {    if (i == 1) {        w.le(C_PREIS, 1000);        clauseC++;    } else if (i == 2) {        w.gt(C_PREIS, 1000).and().le(C_PREIS, 2500);        clauseC++;    } else if (i == 3) {        w.gt(C_PREIS, 2500).and().le(C_PREIS, 5000);        clauseC++;    } else if (i == 4) {        w.gt(C_PREIS, 5000).and().le(C_PREIS, 10000);        clauseC++;    } else if (i == 5) {        w.gt(C_PREIS, 10000);        clauseC++;    }}// create one big OR(...) statement with all of the clauses pushed aboveif (clauseC > 1) {    w.or(clauseC);}

如果

i
只能是1到5,则可以使用
values.size()
并跳过
clauseC
。请注意,如果仅添加一个子句,则可以
OR
完全跳过方法调用。

哦,下面的语句将 无法 正常工作:

target.or().raw(first.getStatement());

因为

target
first
是同一对象。
first.getStatement()
转储
WHERe
我认为不是您想要的整个SQL 子句。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号