1. 도메인 클래스 컨버터
도메인 클래스 컨버터는 HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티 객체를 찾아서 바인딩하는 것이다.
도메인 클래스 컨버터 사용전
id를 받아서 회원 객체를 찾은 후, 회원의 이름을 반환한다
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberRepository memberRepository;
@GetMapping("/members/{id}")
public String findMember(@PathVariable("id") Long id) {
Member member = memberRepository.findById(id).get();
return member.getUsername();
}
}
도메인 클래스 컨버터 사용후
처음부터 회원 객체를 받아서 회원의 이름을 반환한다
HTTP 요청(Request)은 회원 id를 받지만 도메인 클래스 컨버터가 중간에 동작해서 회원 엔티티 객체를 반환한다
도메인 클래스 컨버터도 리파지토리를 사용해서 엔티티를 찾는다
id로 요청이 오면, 도메인 클래스 컨버터가 Id를 기준으로 리포지토리에서 찾은다음 엔티티를 반환하는 건가?
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberRepository memberRepository;
@GetMapping("/members/{id}")
public String findMember(@PathVariable("id") Member member) {
return member.getUsername();
}
}
주의: 도메인 클래스 컨버터로 엔티티를 파라미터로 받으면, 이 엔티티는 단순 조회용으로만 사용해야 한다
(트랜잭션 범위 밖에서 엔티티를 조회했으므로, 엔티티를 변경해도 DB에 반영되지 않는다)
2. 페이징과 정렬
예제
pageable은 인터페이스이므로, 실제는 pagerequest 객체를 생성한다
요청 파라미터는 /members?page=0&size=3&sort=id,desc&sort=username,desc로 온다
pageable에는 page(현재 페이지,0부터 시작), size(한 페이지에 노출할 데이터 건수), sort(정렬 조건, asc/desc)이 담겨있다
@GetMapping("/members")
public Page<Member> list(Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
개별 설정은 @PageableDefault 어노테이션을 사용한다
@RequestMapping(value="/members_page", method= RequestMethod.GET)대신
@GetMapping(value="/members_page)로 하면 안되나?
@RequestMapping(value = "/members_page", method = RequestMethod.GET)
public String list(@PageableDefault(size = 12, sort = “username”,direction = Sort.Direction.DESC) Pageable pageable) {
...
}
'Spring > Spring Data JPA' 카테고리의 다른 글
[스프링 데이터 JPA] 네이티브 쿼리 (0) | 2022.03.20 |
---|---|
[스프링 데이터 JPA] Auditing (0) | 2022.03.20 |
[스프링 데이터 JPA] @EntityGraph (0) | 2022.03.20 |
[스프링 데이터 JPA] 벌크 연산, 스냅샷 (0) | 2022.03.19 |
[스프링 데이터 JPA] 페이징과 정렬 (0) | 2022.03.19 |