JPA에서 페이징과 정렬
- org.springframework.data.domain.Pageable → 페이징을 제공하는 인터페이스
- org.springframework.data.domain.Page → 페이징의 findAll()의 기본적인 반환 메서드로 여러 반환 타입 중 하나이다.
결국 findAll() 메서드를 Pageable 인터페이스로 파라미터를 넘기면 페이징을 할 수 있다.
Optional
: JPA 사용 시 Repository에서 리턴 타입을 Optional로 받을 수 있다.
Optional을 사용하면 반복적인 null 체크를 줄일 수 있다.
1. get()
→ .get()은 결과값이 null일 경우 NoSuchElementException을 발생시킨다.
Optional 내부에 담긴 객체가 null이 아니라면 담겨 있는 객체를 반환하고,
null이라면 인자로 넘겨준 함수형 인자를 통해 생성된 예외(NoSuchElementException)를 발생시킨다.
2. orElseGet()
→ Optional 내부에 담긴 객체가 null이 아니라면 담겨있는 객체를 반환하고,
null이라면 인자로 넘겨준 함수형 인자를 통해 생성된 객체를 반환한다.
3. orElseThrow()
→ 값이 없을 경우 예외를 던져주거나,
orElse, orElseGet을 통해 값이 없을 경우 값을 지정
JPA 페이징 처리 예제
DummyControllerTest.java
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | @RestController // IoC 처리 public class DummyControllerTest { // DI // @Autowired private UserRepository userRepository; // @Autowired와 같은 역할 public DummyControllerTest(UserRepository userRepository) { this.userRepository = userRepository; } // MIME TYPE - application/json // 회원 등록 - 샘플 @PostMapping("/dummy/insert-user") public String insertUser(@RequestBody User user) { user.setRole("user"); // JPA는 자동으로 repository를 만들어준다. userRepository.save(user); return "회원가입에 성공"; } @GetMapping("/dummy/user/{id}") public User getUser(@PathVariable Integer id) { // Optional - user가 있을 수도 있고 null일 수도 있다. Optional<User> userOp = usersRepository.findById(id); // 1. get() : null일 일이 없을 때 사용 // 2. orElseGet() : 데이터가 있으면 그대로 반환 없으면 직접 정의한 객체 반환 // 3. orElseThrow() : 데이터가 있으면 반환 없으면 예외 던짐 // 1. get() User user = userRepository.findById(id).orElseGet(() -> { return new User(); }); // 2. orElseGet() User uesr = userRepository.findById(id).orElseGet(() -> { return new User(); }); // 3. orElseThrow() User uesr = userRepository.findById(id).orElseThrow(() -> { return new IllegalArgumentException("해당 유저는 없어요."); }); System.out.println(user); return user; } @GetMapping("/dummy/users") public List<User> pageList(@PageableDefault(size = 2, sort = "id", direction = Direction.DESC) Pageable pageable) { List<User> users = userRepository.findAll(); Page<User> pageUser = userRepository.findAll(pageable); return pageUser.getContent(); // content만 뽑고 싶다면 } } | cs |
결과 화면
'프로그래밍 > JPA' 카테고리의 다른 글
JPA_테이블 생성 (0) | 2023.06.06 |
---|---|
JPA_JPA yml 파일 설정 (0) | 2023.06.06 |
JPA_더티체킹(dirty checking) (0) | 2023.05.13 |
JPA_JPA와 connection pool (0) | 2023.05.13 |