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 등이 있다.