Sto costruendo una query dinamica utilizzando un FilfetDto Se l'utente ha riempito alcuni campi nell'interfaccia utente, contiene alcuni valori ma non tutti. Quindi devo testare ogni proprietà per costruire un filtraggio di query solo sul compilato Il campo (non vuota):come semplificare la sintassi con QueryDSL dinamico, evitando più "se"
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()));
}
C'è un modo per astrarre il "se" con un'altra sintassi più leggibile?
vorrei qualcosa di simile:
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()));
Sarebbe bello se il "IfNotNull" potrebbe essere acceso, o anche essere il comportamento di default ...
così che sarebbe finita in questo modo:
dslQuery.where(book.title.upper().like(title));
dslQuery.where(book.isbn.like(isbn));
dslQuery.where(author.id.eq(_filter.getAuthorId()));