gpt4 book ai didi

Android Ormlite - 使用条件 where 子句构建查询

转载 作者:行者123 更新时间:2023-11-29 17:47:29 25 4
gpt4 key购买 nike

首先请看下面的代码。我以前使用过各种 ORM(Hibernate、DataMapper),但在 ORMLite 中我面临一个非常棘手的问题。查看我的代码,我将设置有条件的 where 子句。根据 ormlite api and() 方法应该放在两个 where 子句的中间。在我的例子中,还有一个额外的 and() 方法,这在 ORMLite 中是不允许的。

那么在这种情况下最好的解决方案是什么?

if(filter.getInstituionId() != null)
builder.where().eq(BuyPostItem.FIELD_INSTITUTION_ID, filter.getInstituionId()).and();
if(filter.getBookCategoryId() != null)
builder.where().eq(BuyPostItem.FIELD_CATEGORY_ID, filter.getBookCategoryId()).and();
if(filter.getMinPrice() != null)
builder.where().ge(BuyPostItem.FIELD_EXPECTED_PRICE, filter.getMinPrice()).and();
if(filter.getMaxPrice() != null)
builder.where().le(BuyPostItem.FIELD_EXPECTED_PRICE, filter.getMaxPrice()).and();

最佳答案

我自己没有使用过 ORMLite,但我认为你可以这样做

Where where = builder.where();

// dirty hack
boolean hasAnythingBeforeThis = false;

if(filter.getInstituionId() != null) {
where.eq(BuyPostItem.FIELD_INSTITUTION_ID, filter.getInstituionId());
hasAnythingBeforeThis = true;
}
if(filter.getBookCategoryId() != null) {
if(hasAnythingBeforeThis){
where.and();
}
where.eq(BuyPostItem.FIELD_CATEGORY_ID, filter.getBookCategoryId());
hasAnythingBeforeThis = true;
}
if(filter.getMinPrice() != null) {
if(hasAnythingBeforeThis){
where.and();
}
where.ge(BuyPostItem.FIELD_EXPECTED_PRICE, filter.getMinPrice());
hasAnythingBeforeThis = true;
}
if(filter.getMaxPrice() != null) {
if(hasAnythingBeforeThis){
where.and();
}
where.le(BuyPostItem.FIELD_EXPECTED_PRICE, filter.getMaxPrice());
hasAnythingBeforeThis = true;
}

您可以了解更多in docs

关于Android Ormlite - 使用条件 where 子句构建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25474777/

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