我正在使用Spring Boot和QueryDSL来执行REST请求,但在执行搜索时却遇到问题,该搜索执行两个字段中具有相同值的查询(以澄清一个值是在字段中还是另一个字段中)。像这样:

select * from news where title like '%word%' or content like '%word%';


我想发出这样的请求(不严格地说,可能有所不同):

http://localhost?title=word&content=word


我的RestController中有这个:

@GetMapping
public PagedResources<Resource> get(@QuerydslPredicate(root = News.class) Predicate predicate,
                                    @SortDefaults({
                                        @SortDefault(sort = "type", direction = ASC),
                                        @SortDefault(sort = "dateCreated", direction = DESC)
                                    }) Pageable pageable) {
    Page<News> pages = newsService.getAllWithPagination(predicate, pageable);
    return pagedResourcesAssembler.toResource(pages, newsResourceAssembler);
}


这是我的存储库:

public interface NewsRepository extends JpaRepository<News, Long>, QuerydslPredicateExecutor<News>, QuerydslBinderCustomizer<QNews> {

    @Override
    default void customize(QuerydslBindings bindings, QNews news) {
        bindings.bind(String.class)
            .first((SingleValueBinding<StringPath, String>) StringExpression::containsIgnoreCase);
}


}

我厌倦了搜索,没有找到做过类似事情的人。有人对此有任何建议吗?

最佳答案

QNews qnews = QNews.news;
final BooleanExpression booleanExpression = qnews.title.like(“%word%”)。or(qnews .content.like(“%word%”));


  就在此之前检查queryparam中的空值

09-11 17:29