1. 서버측 검색 처리 - DTO 추가
검색 조건으로 사용될 type과 keyword를 추가한다.
@Builder
@AllArgsConstructor
@Data
public class PageRequestDTO {
private int page;
private int size;
private String type;
private String keyword;
public PageRequestDTO () {
this.page = 1;
this.size = 10;
}
public Pageable getPageable(Sort sort){
return PageRequest.of(page -1, size, sort);
}
}
2. 서비스 계층의 검색 구현
동적으로 검색 조건을 처리될 수 있도록 ServiceImpl 내에 메소드를 추가한다.
private BooleanBuilder getSearch(PageRequestDTO requestDTO) {
String type = requestDTO.getType();
String keyword = requestDTO.getKeyword();
BooleanBuilder booleanBuilder = new BooleanBuilder();
QJamsilStadium qBearsStadium = QJamsilStadium.jamsilStadium;
// sno > 0조건 생성
BooleanExpression expression = qBearsStadium.sno.gt(0L);
booleanBuilder.and(expression);
if (type == null || type.trim().length() == 0) {
return booleanBuilder;
}
BooleanBuilder conditionBuilder = new BooleanBuilder();
if (type.contains("1")) {
conditionBuilder.or(qBearsStadium.base.contains("1")).and(qBearsStadium.section.contains(keyword));
}
if (type.contains("2")) {
conditionBuilder.or(qBearsStadium.base.contains("2")).and(qBearsStadium.section.contains(keyword));
}
if (type.contains("3")) {
conditionBuilder.or(qBearsStadium.base.contains("3")).and(qBearsStadium.section.contains(keyword));
}
// 모든 조건 통합
booleanBuilder.and(conditionBuilder);
return booleanBuilder;
}
getSearch()는 PageRequestDTO를 파라미터로 받는다.
이 때, 검색 조건(type, keyword)이 있는 경우에는 conditionBuilder 변수를 생성해서 각 검색 조건을 or로 연결 처리한다.
만약에 검색 조건이 없다면 sno > 0으로 생성된다.
목록을 출력하는 getList() 메소드에서도 검색 조건에 대한 조회가 필요하므로 아래와 같이 수정한다.
@Override
public PageResultDTO<StadiumDTO, JamsilStadium> getList(PageRequestDTO requestDTO) {
Pageable pageable = requestDTO.getPageable(Sort.by("sno").descending());
// 검색 조건 처리를 위한 추가
BooleanBuilder booleanBuilder = getSearch(requestDTO);
Page<JamsilStadium> result = repository.findAll(booleanBuilder, pageable); // Querydsl 사용
Function<JamsilStadium, StadiumDTO> fn = (entity -> entityToDTO(entity));
return new PageResultDTO<>(result, fn);
}
'BACK-END > Springboot' 카테고리의 다른 글
게시글 삭제하기 (0) | 2022.10.25 |
---|---|
게시글 수정하기 (0) | 2022.10.25 |
게시글 조회하기 (2) | 2022.09.26 |
[Springboot] 동작 원리 - Socket (0) | 2021.12.14 |
[Springboot] JPA (0) | 2021.12.14 |