Spring Data JPA分页查询和排序

 时间:2026-02-14 04:32:06

1、我们还是使用前两篇文章的开发环境和创建的类。对于UserRepository接口,之前该类是继承JpaRepository接口,我们改成继承PagingAndSortingRepository接口,其实也可以不用修改,因为JpaRepository也继承了PagingAndSortingRepository接口,我们这样做主要是想仅仅演示分页和排序功能。

Spring Data JPA分页查询和排序

2、首先我们来介绍分页查询,在使用默认排序的情况下,调用UserRepository的findAll()方法,方法传参中创建一个分页对象,new PageRequest(currentPage-1,pageSize),currentPage为当前页,pageSize为每页条数,直接传参,(currentPage-1)*pageSize为数据库查询的offset,pageSize即为limit通过该方法可以取到当前页的数据。

@GetMapping(path = "/only/page")public Page<User> getAllUserByOnlyPage(Integer currentPage,                                       Integer pageSize) {    return userRepository.findAll(            new PageRequest(currentPage-1,pageSize));}

Spring Data JPA分页查询和排序

3、接下来我们创建一个方法,该方法仅仅实现排序的功能,调用UserRepository的findAll()方法,方法传参中创建一个排序对象,new Sort(new Sort.Order(        Sort.Direction.ASC, sortColumn)),指定排序方法ASC为升序,sortColumn参数为排序的字段,支持传参。

/** * 排序查询 * @param sortColumn */@GetMapping(path = "/only/sort")public Iterable<User> getAllUserBySort(String sortColumn) {    return userRepository.findAll(            new Sort(new Sort.Order(                    Sort.Direction.ASC, sortColumn)));}

Spring Data JPA分页查询和排序

4、分页和排序同时进行的方法,如下所示,我们在创建分页对象的时候,该对象传入排序参数即可,new PageRequest(currentPage-1, pageSize,  new Sort(new Sort.Order(Sort.Direction.ASC, sortColumn))。

/** * 排序和分页查询 * @param currentPage * @param pageSize * @param sortColumn * @return */@GetMapping(path = "/page")public Iterable<User> getAllUserByPageAndSort(Integer currentPage,                                              Integer pageSize,                                              String sortColumn) {    return userRepository.findAll(            new PageRequest(currentPage-1, pageSize,                    new Sort(new Sort.Order(                    Sort.Direction.ASC, sortColumn)))            );}

Spring Data JPA分页查询和排序

5、如果分页和排序查询需要根据某一个字段过滤该怎么做呢?此时我们就需要在UserRepository中定义根据年龄进行查询的方法了,方法为:

Page<User> findByAge(Integer age, Pageable Pageable ); 

此处涉及到后面要分享的知识点,我们此处先将代码列出,原理后面再分享。

/** * 根据年龄进行分页查询 * @param age * @param currentPage * @param pageSize * @return */@GetMapping(path = "/age/page")public Page<User> getUserByAgeAndPage(Integer age,                                      Integer currentPage,                                      Integer pageSize) {    return userRepository.findByAge(            age,            new PageRequest(currentPage-1,pageSize)    );}

Spring Data JPA分页查询和排序

Spring Data JPA分页查询和排序

6、以上方法编写完成后,我们启动应用,接下来看看在postman中测试的结果和数据库中的数据对比,如下图所示。

Spring Data JPA分页查询和排序

Spring Data JPA分页查询和排序

Spring Data JPA分页查询和排序

Spring Data JPA分页查询和排序

  • MobaXterm怎么设置使用Windows PATH环境
  • 微信怎么查看铁路12306春运购票日历
  • Eclipse中设置作者日期等Java注释模板
  • 如何使用NetBeans创建JavaScript库?
  • 游泳怎么保护耳朵
  • 热门搜索
    休闲西服配什么裤子 永垂不朽是什么意思 祝福 歌词 伤不起什么意思 家里挂什么画风水好 暗示的意思 苹果下载软件用什么 macd是什么意思 云淡风轻的意思 股票十字星什么意思