@GetMapping("/members")
public Page<Member> list(Pageable pageable){
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
파리미터로 Pageable을 받아서 필터링된 데이터를 가져올 수 있음
토탈 몇페이지냐 현제 몇페이지고 페이지당 사이즈가 몇이고 각종 메타정보가 싸그리 보내짐
아무것도 설정안하면 한페이지에 20개씩 가져옴
전역설정 변경해서 10개만 가져올 수 도 있음
몰론 전역 설정도 가능함
@GetMapping("/members")
public Page<Member> list(@PageableDefault(size = 5, sort = "username") Pageable pageable){
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
기본값으로 한페이지에 5개 sort는 username으로 하는 것을 알 수 있음
몰론 내보낼때도 DTO로 변환해서 내보내야함(엔티티를 밖에 노출하는 것은 안됨)
@GetMapping("/members")
public Page<Member> list(@PageableDefault(size = 5, sort = "username") Pageable pageable){
Page<Member> page = memberRepository.findAll(pageable);
page.map(member -> new MemberDto(member.getId(), member.getUsername(), null));
return page;
}
.map을 쓰면 쉽게 변환 할 수 있음
ArrayList<MemberDto> test = new ArrayList<>();
test.add(new MemberDto(null, null, null));
test.stream().map(member -> new MemberDto(member.getId(), null, null));
MemberDto에 member.getXX로 넣기 번거로울 수 있음
아예 Member통채로 넣어버려도 됨 왜냐하면 내부에서는 엔티티를 사용해도 상관없기때문임 외부에 노출되는것도 아니고 누가 뭐라하겠음
@Data
public class MemberDto {
private Long id;
private String username;
private String teamName;
public MemberDto(Member member) {
this.id = member.getId();
this.username = member.getUsername();
this.teamName = member.getTeam().getName();
}
}
@GetMapping("/members")
public Page<MemberDto> list(@PageableDefault(size = 5, sort = "username") Pageable pageable){
// return memberRepository.findAll(pageable).map(member -> new MemberDto(member.getId(), member.getUsername(), null));
// return memberRepository.findAll(pageable).map(member -> new MemberDto(member));
return memberRepository.findAll(pageable).map(MemberDto::new);
}
return memberRepository.findAll(pageable).map(member -> new MemberDto(member));
해당코드가 아래와 같이 람다를 통해 간단하게 바꿀 수 도 있음
return memberRepository.findAll(pageable).map(MemberDto::new);