Bir FilfetDto kullanarak dinamik bir sorgu oluşturuyorum Kullanıcı kullanıcı arabiriminde bir alan doldurduysa, bazı değerler içeriyor ama hepsi değil.dinamik QueryDSL ile sözdizimini sadeleştirmek, birden çok "if" den kaçınmaktan kaçınır
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()));
}
soyut bir yolu "eğer" ile başka daha okunabilir sözdizimi var mı: Yani ben sadece dolu (boş değil) sahada sorgu filtreleme oluşturmak için her özelliğini test etmek zorunda? Bu "IfNotNull" açık olması olabilir güzel, hatta
yüzden böyle sona ereceğini ... varsayılan davranış olurdu
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()));
:
Ben böyle bir şey istiyorum:
dslQuery.where(book.title.upper().like(title));
dslQuery.where(book.isbn.like(isbn));
dslQuery.where(author.id.eq(_filter.getAuthorId()));