【发布时间】:2016-02-08 08:35:40
【问题描述】:
我刚刚开始将 QueryDSL 集成到 Spring Boot 项目中,我正在寻找一种方法来从现有实体 bean 构建查询。使用@ModelAttribute,只要参数与 bean 一致,就可以很容易地通过控制器的 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 文档,但没有任何反应。
那么有没有一种很好、整洁的方法来处理这种情况,而不会用样板代码阻塞我的服务类?
【问题讨论】:
标签: java spring spring-boot spring-data querydsl