천천히 알아보는 코딩공부

[Spring] API로 페이징 처리 Pageable 본문

Java/SpringBoot

[Spring] API로 페이징 처리 Pageable

고기고기물고기 2022. 11. 4. 10:08

게시판들을 보면 게시글을 전체 조회 하지않고 개수를 정해서 조회를 하고 페이지 별로 나눠져서 조회를 하고 있다

구현해보자!!

 

JPA로 구현하였다.

 

Controller

@RestController
@RequestMapping("/adminKisline/notice")
public class AdminNoticeController{

	@Autowired
    private AdminMasterService service;
    
    @CrossOrigin(origins = "*")
    @GetMapping("/noticeSelect")
    public Page<AdminNoticeEntity> NoticeSelect(
    	@PageableDefault(size = 10, sort = "id", direction = Sort.Direction.DESC) Pageable pageable)
        {
        	return service.getAdminNoticeList(pageable);
        }


}

pageable -> org.springframework.data.domain

@PageableDefault 파라미터 입력 안할 시 size(페이지당 개수), sort 해당 컬럼정렬 설정

 

Service(Interface)

public interface AdminMasterService {

	public Page<AdminNoticeEntity> getAdminNoticeList(Pageable pageable);
}

 

impl

public class AdminMasterService implements AdminMasterService {

	@Override
    Public Page<AdminNoticeEntity> getAdminNoticeList(Pageable pageable)
    {
    	return (Page<AdminNoticeEntity>) adminNotice,findAll(pageable);
    
    }
}

 

Entity

@Data
@Entity
@Table(name="AdminNotice")
public class AdminNoticeEntity {

	@Id
    private int id;
    private String serviceName;
    private String serviceGroup;
    private String title;
    private String content;
    private String writeId;
    private String writeDate;
    private Stromg uptUsrid;
    private String uptDtm;
}

 

Repository

@EnableJpaRepositories
public interface AdminNoticeRepository extends CrudRepository<AdminNoticeEntity, Long> {

	Page<AdminNoticeEntity> findAll(Pageable pageable);
}

 

호출 URL : localhost:포트/adminKisline/notice/noticeSelect

파라미터 입력시 localhost:포트/adminKisline/notice/noticeSelect?page=2&size=10

출력결과 : 

{
  "content": [
	결과값
  ],
  "pageable": {
    "sort": { "sorted": false, "unsorted": true, "empty": true },
    "pageNumber": 3,
    "pageSize": 4,
    "offset": 12,
    "paged": true,
    "unpaged": false
  },
  "totalPages": 25,
  "totalElements": 100,
  "last": false,
  "numberOfElements": 4,
  "number": 3,
  "sort": { "sorted": false, "unsorted": true, "empty": true },
  "size": 4,
  "first": false,
  "empty": false
}

 

반환 타입에 따른 페이징 결과

Spring Data JPA 에는 반환 타입에 따라서 각기 다른 결과를 제공한다.

 

  1. Page<T> 타입
  2. Slice<T> 타입
  3. List<T> 타입

각자 다른 결과를 반환해준다.

Page<T> 타입

Page<T> 타입을 반환 타입으로 받게 된다면 offset과 totalPage 를 이용하여 서비스를 제공할 수 있게된다.

 

Page<T> 는 일반적인 게시판 형태의 페이징에서 사용된다.

Comments