說我有CustomerQueryInfo
豆具有以下屬性:返回一個QueryDSL BooleanExpression值爲true
- 字符串的firstName
- 字符串的lastName
- StatusEnum狀態
我想執行一個「QueryDSL」使用此類型的對象搜索將返回客戶列表List<Customer>
。
如果CustomerQueryInfo
的其中一個字段是null
,我不想在搜索中使用它。因此,所有三個字段設置爲null
的CustomerQueryInfo
對象將返回所有客戶。
我正在尋找使用QueryDSL執行此類搜索的最佳做法。
是這樣確定:
private BooleanExpression isFirstNameLike(String firstName){
if(firstName==null)
return true BooleanExpression somehow;
return QCustomer.customer.firstName.like(firstName);
}
private BooleanExpression isStatutEq(StatusEnum status){
if(status==null)
return true BooleanExpression somehow;
return QCustomer.customer.status.eq(status);
}
則:
return query.from(customer).where(isFirstNameLike(customerQueryInfo.getFirstName).and(isLastNameLike(customerQueryInfo.getLastName).and(isStatusEq(customerQueryInfo.getStatus))).list;
- 如何返回
BooleanExpression
計算結果爲真? - 如果上述方法不可取,那麼建議的最佳做法是什麼?
再次感謝你Timo。 – balteo
不確定是否相關,但今天我碰到QueryDSL 3.5.0(使用spring-data-jpa)中的一個問題,其中'isTrue()'正確地返回了一切,但'eq(Boolean.TRUE)'沒有返回任何東西。但是'eq(Boolean.FALSE)'正常工作。這是一個錯誤? – EpicPandaForce
跳過空位記錄在哪裏。是否可以對'BooleanExpression.and(Predicate)'做同樣的事情?當前空跳過是這裏的一個實現細節,當參數被標註爲@Nullable時,沒有記錄空行爲。 –