jpa 如何在Spring Boot 中选择理想的分页方式?

67up9zun  于 12个月前  发布在  Spring
关注(0)|答案(3)|浏览(160)

我需要你对页码的建议。
我的表数据很长,所以我使用分页,每个分页操作都从数据库中调用数据
我在spring-boot应用程序中有一个rest方法。
这种方法可以从数据库中获取数据,一切正常。
我需要分页计数(我的数据/每页计数的所有计数)。
我可以从DB中找到这个计数。
我必须写两个单独的方法为allCount和下面的方法?
如何在Sping Boot 中使用理想的分页方式?

@CrossOrigin(maxAge = 3600)
    @RequestMapping(value = "/payment/all", method = RequestMethod.POST)
    public List<NotaryPaymentInformationEntity> getAllProduct(@RequestBody PaginationModel pag){
        try {
            System.out.println(pag.getPageno()+ " " + pag.getRecords());
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Pageable pageable = new PageRequest(pag.getPageno(), pag.getRecords());
        System.out.println("here"+notaryPaymentRepository.findAll(pageable).getContent().size());
        return notaryPaymentRepository.findAll(pageable).getContent();
    }



public interface NotaryPaymentRepository  extends JpaRepository<NotaryPaymentInformationEntity,Integer>{

}

字符串
x1c 0d1x的数据

flvtvl50

flvtvl501#

你可以在Page类obj中得到你的查询的响应,它扩展了Slice类,并拥有你需要的所有方法。

Pageable pageable = new PageRequest(pageNo, PAGE_SIZE);

字符串
需要从客户端发送pageNo和PAGE_SIZE

@Query(value = "SELECT h FROM {NameOfYourModelClass} h")
Page<HorseWatch> getPaginatedModel(Pageable pageable);


从服务类调用此方法并在Page对象中检索它
您可以使用(使用对象中的getContent()getNumber()getTotalPages())获取页面内容、页码和总页数
将这些值保存在响应类中,并将该类发送回客户端

public class PageResponse {
    private List<{NameOfModelClass}> content;
    private int currentPage;
    private int totalPages;
}

yc0p9oo0

yc0p9oo02#

您需要分页支持,然后添加参数Pageable pageable

@CrossOrigin(maxAge = 3600)
    @RequestMapping(value = "/payment/all", method = RequestMethod.POST)
    public List<NotaryPaymentInformationEntity> getAllProduct(Pageable pageable){
        try {
            System.out.println(pag.getPageno()+ " " + pag.getRecords());
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //NO pageable object need to be manually constructed
        return notaryPaymentRepository.findAll(pageable).getContent();
    }

字符串
URL现在可以有额外的查询参数,如**/payment/all?page=2&size=10**
如果你使用Spring Data REST,那么你将拥有HATEOAS支持,它将给予你更多关于有多少总计数以及你在哪个页面等的信息,但响应将是HAL格式。docs.spring.io/spring-data/rest/docs/current/reference/html/#paging-and-sorting

zd287kbt

zd287kbt3#

也许现在回答已经太晚了,但我是这样做的。

  • 存储库 *
Page<Student> findAll(Pageable pageable)

字符串

  • 服务 *
Pageable pageable = PageRequest.of(filter.getPage(), filter.getSize());
Page<Student> all = studentRepository.findAll(pageable);

int size = all.getSize();
long totalElements = all.getTotalElements();
int totalPages = all.getTotalPages();
List<Student> content = all.getContent();

  • 进口 *
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;


也许这不是一个直接的答案,但对某人来说是有用的)

相关问题