FilfetDtoを使用して動的クエリを作成しています。ユーザーがUIの一部のフィールドに入力した場合、すべてではなく一部の値が含まれます。したがって、各プロパティをテストして、入力された(空ではない)フィールドでのみフィルタリングするクエリを作成する必要があります。
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()));
}
「if」を別のより読みやすい構文で抽象化する方法はありますか?
私は次のようなものが欲しいです:
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()));
「IfNotNull」をオンにするか、デフォルトの動作にすることができれば便利です...
したがって、次のようになります。
dslQuery.where(book.title.upper().like(title));
dslQuery.where(book.isbn.like(isbn));
dslQuery.where(author.id.eq(_filter.getAuthorId()));