[Spring JPA #18] 스프링 데이터 Pageable과 Sort
| 스프링 데이터 Pageable과 Sort
프로젝트 구조
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── tutorial
│ │ │ └── springevent
│ │ │ ├── Application.java
│ │ │ ├── PostController.java
│ │ │ ├── Post.java
│ │ │ └── PostRepository.java
│ │ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── tutorial
│ └── springevent
│ └── PostControllerTest.java
의존성 관리
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
소스 코드
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Entity
@Data
public class Post {
@Id @GeneratedValue
private Long id;
private String title;
@Temporal(TemporalType.TIMESTAMP)
private Date created;
}
@RestController
public class PostController {
@Autowired
PostRepository postRepository;
@GetMapping("/posts")
public Page<Post> getPosts(Pageable pageable) {
return postRepository.findAll(pageable);
}
}
- Pageable 인터페이스는 Paging 하기 위한 파라미터들을 담은 PageRequest 같은 객체에 접근하기 위한 역할을 합니다. 이 매개변수를 통해 Paging 하기 위한 정보를 담은 객체가 들어오게 되고 이것을 통해 자동적으로 Paging에 필요한 데이터를 처리하여 반환하게 되는 것입니다.
테스트 코드
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class PostControllerTest {
@Autowired
MockMvc mockMvc;
@Autowired
PostRepository postRepositry;
@Test
public void getPosts() throws Exception {
Post post = new Post();
post.setTitle("jpa");
postRepositry.save(post);
mockMvc.perform(get("/posts/")
.param("page", "0")
.param("size", "10")
.param("sort", "created,desc")
.param("sort", "title"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.content[0].title", is("jpa")));
}
}
- page : 검색을 원하는 페이지 번호입니다.
- size : 한 페이지의 게시물 개수를 나타냅니다.
- sort : 정렬 방식을 나타냅니다.
'Spring Data > Spring Data JPA' 카테고리의 다른 글
[Spring JPA #22] Spring JPA Named Parameter, SpEL (0) | 2021.03.26 |
---|---|
[Spring JPA #21] Spring JPA 쿼리 메서드 및 정렬 (0) | 2021.03.26 |
[Spring JPA #20] 스프링 부트 Spring JPA 엔티티 저장 메커니즘 (0) | 2021.03.26 |
[Spring JPA #19] 스프링 데이터 HATEOAS (0) | 2021.03.26 |
[Spring JPA #17] 스프링 데이터 DomainClassConverter (0) | 2021.03.26 |
[Spring JPA #16] 스프링 데이터 QueryDsl (0) | 2021.03.25 |
[Spring JPA #15] 스프링 데이터 도메인 이벤트 (0) | 2021.03.25 |
[Spring JPA #14] 스프링 데이터 커스텀 리포지터리 만들기 (0) | 2021.03.25 |