Backend/SpringBoot
Paging
Dean83
2024. 10. 24. 16:13
다수의 데이터가 있을 경우, 전부를 보내주지 않고 Paging 하여 리턴 할 수 있도록 한다. 기본구조 4개중 Repository Service, Controller 세곳 모두 연관이 있다.
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; 두개를 import 해야 한다.
- Repository
- Page 를 리턴하는 함수를 하나 생성한다.
- 인자값으로는 Pageable을 받는다.
package com.example.test1.test1;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.domain.Page; //추가
import org.springframework.data.domain.Pageable; //추가
public interface repo extends JpaRepository<entity1, Long>{
List<entity1> findByAddress(String address);
List<entity1> findByName(String name);
List<entity1> findByPhoneNumber(String phoneNumber);
List<entity1> findByNameAndPhoneNumber(String name, String phoneNumber);
Page<entity1> findAllbyPage(Pageable Pageable); //추가
}
- Service
- Repository 에서 선언한 함수를 호출하여 값을 리턴한다
package com.example.test1.test1;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Service
public class ServiceClass_Java
{
private final repo _repo;
public ServiceClass_Java(repo _repoItem)
{
this._repo = _repoItem;
}
//추가
public Page<entity1> getList(int page)
{
//1페이지에 10개가 들어간다
Pageable pageable = PageRequest.of(page, 10);
return this._repo.findAllbyPage(pageable);
}
}
- Controller
- 인자값으로 페이지 번호를 받아야 한다
- Service 함수를 통해 Page를 받아온다
import org.springframework.data.domain.Page
...
@Controller
public class test(val serviceItem : ServiceClass)
{
@GetMapping("/hello/{pagenum}")
fun Hello(model : Model, @PathVariable("pagenum") pagenum : Int = 0, @RequestParam("content") content : String) : String
{
var paging : Page<entity1> = this.serviceItem.getList(pagenum);
...
return "hello"
}
}
- Page 내장 속성
- 변수명.isEmpty
- .totalPages
- .size
- 페이지당 보여줄 수
- .number
- 현재 페이지 번호
- .hasPrevious
- .hasNext 등이 있다.