Ich baue eine dynamische Abfrage mit einem FilfetDto Wenn der Benutzer ein Feld in der Benutzeroberfläche gefüllt hat, das enthält einige Werte, aber nicht alle. Also muß ich jede Eigenschaft testen, eine Abfrage-Filterung nur auf gefüllte (nicht leer) Feld zu konstruieren:Wie vereinfacht man Syntax mit dynamischen QueryDSL, Vermeidung mehrerer "wenn"
JPAQuery dslQuery = new JPAQuery(em);
dslQuery.from(book);
dslQuery.join(book.author, author);
String title = StringUtils.upperCase(StringUtils.trim(_filter.getTitle()));
if (StringUtils.isNotBlank(title)) {
dslQuery.where(book.title.upper().like(title));
}
String isbn = StringUtils.trim(_filter.getIsbn());
if (StringUtils.isNotBlank(isbn)) {
dslQuery.where(book.isbn.like(isbn));
}
if (_filter.getAuthorId() != null) {
dslQuery.where(author.id.eq(_filter.getAuthorId()));
}
Gibt es eine Möglichkeit zu abstrahieren die „if“ mit einer anderen lesbaren Syntax?
würde Ich mag so etwas wie:
JPAQuery dslQuery = new JPAQuery(em);
dslQuery.from(book);
dslQuery.join(book.author, author);
dslQuery.where(book.title.upperIfNotBlank().like(title));
dslQuery.where(book.isbn.likeIfNotNull(isbn));
dslQuery.where(author.id.eqIfNotNull(_filter.getAuthorId()));
Es wäre schön, wenn der „IfNotNull“ eingeschaltet werden könnte, oder sogar das Standardverhalten sein ...
so wäre es am Ende wie folgt:
dslQuery.where(book.title.upper().like(title));
dslQuery.where(book.isbn.like(isbn));
dslQuery.where(author.id.eq(_filter.getAuthorId()));