/repository/support안에 impl 파일들
public class ProjectRepositoryImpl extends QuerydslRepositorySupport implements
CustomProjectRepository {
위와 같이 QuerydslRepositorySupport를 extends 한다. 안에 필요한 함수들을 구현해주면 된다.
@Override
public Page<Project> findAllByFilter(Pageable pageable, ProjectFilter filter) {
BooleanBuilder builder = new BooleanBuilder();
if (!StringUtils.isBlank(filter.getDate())) {
builder.and(project.date.containsIgnoreCase(filter.getDate()));
}
if (!StringUtils.isBlank(filter.getTitle())) {
builder.and(project.title.containsIgnoreCase(filter.getTitle()));
}
if(!StringUtils.isBlank(filter.getAddress())){
builder.and(project.address.containsIgnoreCase(filter.getAddress()));
}
if(!StringUtils.isBlank(filter.getTechnology())){
builder.and(project.technology.containsIgnoreCase(filter.getTechnology()));
}
if(!StringUtils.isBlank(filter.getAddress())){
builder.and(project.purpose.containsIgnoreCase(filter.getPurpose()));
}
final JPQLQuery<Project> query = from(project).where(builder);
List<Project> result = getQuerydsl().applyPagination(pageable, query).fetch();
return new PageImpl<>(result,pageable,query.fetchCount());
}
위와 같이 원하는 정보들을 모아서 paging 해준다.
물론 /repository/custom 과 /repository 설정은 기본적으로 해준 상태에서 진행해야한다!!!
그 후 controller에 pageable 활용
@GetMapping("")
public String list(Model model, Pageable pageable, ProjectFilter filter) {
model.addAttribute("projectList", projectService.findAllByFilter(pageable, filter));
model.addAttribute("filter", filter);
return "project/list";
}
❗ paging 원리에 대해선 나중에 다뤄봐야겠다.. ❗
'Web > Spring' 카테고리의 다른 글
[ERROR] 유의해야 할 점 (0) | 2021.08.06 |
---|---|
[Annotation] @PathVariable (0) | 2021.08.06 |
[배경] JPA vs JDBC, JPA vs Mybatis, JPA vs Spring Data JPA (0) | 2021.08.06 |
[설정] 자동망치 기능 (0) | 2021.08.06 |
[설정] application.properties (0) | 2021.08.04 |