본문 바로가기

프로그래밍/JPA

JPA_Pageable 페이징 처리

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