gpt4 book ai didi

java - QueryDSL:从实体构建查询

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:21 26 4
gpt4 key购买 nike

我刚刚开始将 QueryDSL 集成到 Spring Boot 项目中,并且正在寻找一种从现有实体 bean 构建查询的方法。使用@ModelAttribute,只要参数与 bean 一致,就可以通过来自 Controller 的 GET 请求轻松传入实体:

public Page<Company> getLogins(@ModelAttribute Company company, Pageable pageable, @RequestParam(value = "page", required = false) String pageNumber){
return companyService.findbyParameters(company,pageNumber);

}

在服务类中,我可以使用 BooleanBuilder 来构建查询:

    public Page<Company> findbyParameters(Company companySearch,String pageNumber){
QCompany company = QCompany.company;
BooleanBuilder builder = new BooleanBuilder();
if (companySearch.getEmail() != null && !companySearch.getEmail().equals("")){
builder.and(company.email.eq(companySearch.getEmail()));
}
if (companySearch.getCompanyName() != null && !companySearch.getCompanyName().equals("")){
builder.and(company.companyName.eq(companySearch.getCompanyName()));
}
//add other clauses...
return loginRepository.findAll(builder.getValue(),pageableService.getPageRequest(pageNumber));
}

..这工作正常。但这似乎是不必要的工作,因为我必须为我正在使用的每个实体编写类似的、冗长的条件代码。我认为反射可能是一种选择,但我不确定 QueryDSL 是否有内置的东西可以处理这种情况。我查看了 QueryDSL 文档,但没有什么让我惊讶的。

那么有没有一种好的、整洁的方法来处理这种情况,而又不会用样板代码阻塞我的服务类?

最佳答案

您可以使用 Spring Data 的 QueryDSL 集成。基本上,您可以在存储库接口(interface)中扩展 QueryDslPredicateExecutor ,并添加一个 findAll 方法,该方法获取 QueryDSL Predicate 并根据该 Predicate 过滤所有结果。您查看更多详情here .

关于java - QueryDSL:从实体构建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35265273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com