반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- redis
- PostgreSQL
- codebuild
- Airflow
- bootstrap
- codepipeline
- aws cicd
- or some instances in your deployment group are experiencing problems.
- SQL
- COALESCE
- AWS CI/CD 구축하기
- docker
- codedeploy error
- Jenkins
- Flux
- kubeflow
- Kafka
- IntelliJ
- Spring
- VPN
- aws
- 도커
- Spring Error
- chart.js
- node
- JavaScript
- codedeploy
- chartjs
- java bigdecimal
- Python
Archives
- Today
- Total
Small Asteroid Blog
[JPA] List to Page - List를 Page로 변환해서 사용하기 본문
728x90
JPA 에서 제공하는 Page를 사용하고 싶은데
데이터를 가공해서 사용하다 보니 List 로 결과가 나오고 있어서
List를 Page로 변환해서 사용하고자 한다.
아래 코드를 참고해서 List 를 Page로 변환해서 사용하면 된다.
방법1
Page<CompanyResponse.CompanyDto> pageResult = (Page<CompanyResponse.CompanyDto>) PageUtils.makePageResponse(list, pageable);
페이징 처리를 위한 공통 코드
public static Page<?> makePageResponse(List<?> list, Pageable paging, int totalCount) {
try {
return (new PageImpl<>(list, paging, totalCount));
} catch (Exception e) {
return (new PageImpl<>(new ArrayList<>(), paging, totalCount));
}
}
응답값
@Getter
@SuperBuilder
public class CompanyResponse extends PagingDto {
private final List<CompanyDto> companyDtos;
@Data
@Builder
public static class CompanyDto {
@Schema(name = "회사 아이디")
private Long companyId;
@Schema(name = "회사명")
private String companyName;
}
}
응답값에서 사용하는 페이지 DTO
@Getter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class PagingDto {
@Builder.Default
private int size = 15;
@Builder.Default
private int page = 1;
@Builder.Default
private long totalCount = 0;
@Builder.Default
private int totalPages = 0;
}
방법2
위의 방법으로 안될때는 아래 내용처럼 페이징 처리를 위한 값을 하나씩 다 처리해서 사용해도 된다.
List<Company> listResult = companyRepotiroy.findAllByName(name);
// 요청으로 들어온 page와 한 page당 원하는 데이터의 갯수
PageRequest pageRequest = PageRequest.of(page, size);
int start = (int) pageRequest.getOffset();
int end = Math.min((start + pageRequest.getPageSize()), listResult.size());
nt totalCount = listResult.size() < pageable.getPageSize() ? 1 : (int) Math.ceil((double) listResult.size() / pageable.getPageSize()); // 페이지 사이즈에 따른 페이지 전체 카운트
Page<Company> userPage = new PageImpl<>(listResult.subList(start, end), pageRequest, listResult.size());
참고
728x90
반응형
'백엔드 > Spring' 카테고리의 다른 글
[JPA] Swagger Error - [Request processing failed; nested exception is java.lang.NullPointerException] with root cause (0) | 2023.08.16 |
---|---|
[Spring] Spring HATEOAS란 (0) | 2023.08.10 |
[JPA] JsonMappingException: Infinite recursion (StackOverflowError) 오류 (0) | 2023.08.03 |
실전! 스프링 데이터 JPA 내용 정리 - 섹션 4(1) (0) | 2023.08.02 |
[JPA] COALESCE - @Query에서 sum()사용시 Null 을 0으로 (0) | 2023.05.19 |