Spring Data @Repository 的分页查询

分页查询在网站的设计中必不可少。

分页查询有几种方式,通常用的是:网页分页和后端分页。

不要觉得现在还有人用网页分页的方式吗?

相信我,奇葩远比想象得多。经历过一个项目,全部都是网页分页,后端都是大量的 JOIN 和毫无人性的返回几千条记录。

为什么不返回上万条?那是因为后台数据库不大,只有 5 万多点的数据量。连个 Limit 都懒得用的项目还堂而皇之的上线运行了好几年到不重做差不多就没法用的地步。

我们来说说基于 Spring Data 的分页查询。

如果项目使用的是 Spring Data,那么恭喜你,这分页太方便了。

PagingAndSortingRepository 接口

首先你的实体仓库类,需要继承 PagingAndSortingRepository 这个接口。

写法也简单到只写一个继承就可以了。

PagingAndSortingRepository 接口继承于 CrudRepository 接口,拥有CrudRepository 接口的所有方法, 并新增两个功能:分页和排序。

Service

Service 层也简单到不能再简单了。

假设我们希望查询一个实体类的所有数据,但是我们希望进行分页。

我们可以简单到

    public Page<Visa> findAllVisa(Pageable pageable) {
        return visaRepository.findAll(pageable);
    }

只写这一段话就可以了。

我们只需要把 pageable 作为参数传递进去就行了。

Pageable 是一个接口。

定义分页对象

要对实体数据进行分页,我们需要让实体数据知道后面查询的时候是怎么分页的。

在服务层或者控制层定义一个 Pageable 对象。

 

        if (ObjectUtils.isEmpty(searchCondition)) {
            Pageable visaPage = PageRequest.of(pageNumber, 100, Sort.by("dateVisaInterview").descending());
            pageableResponse.setPagedData(visaService.findAllVisa(visaPage));
        }

在这个对象中,我们创建了一个 visaPage 分页对象。

在这个分页对象中,我们提供了参数:

  1. 分页的当前页
  2. 每一个页面的大小
  3. 排序字段

返回

在分页查询的结果都会返回一个叫做 Page 的对象。

Page 是一个接口,继承的 Slice。

为了让程序更加简单,我们直接定义了一个返回的对象。将 Page 的内容返回到 API 上。

运行结果

如果 API 运行没有问题的话,在 API 的返回中,我们可以看到下面的信息。

 

 

针对分页查询的所有信息都有了。

包括有当前页,页大小,偏移量,总数据量。

使用 Spring Data 的分页查询,能够大大加快程序的处理,甚至能够让程序员不再关注后端是如何获得查询数据和如何进行查询的。

真的是一个非常贴心的接口。

Spring Data @Repository 的分页查询 - Spring - OSSEZ分页查询在网站的设计中必不可少。 分页查询有几种方式,通常用的是:网页分页和后端分页。 不要觉得现在还有人用网页分页的方式吗? 相信我,奇葩远比想象得多。经历过一个项目,全部都是网页分页,后端都是大量的 JOIN 和毫无人性的返回几千条记录。 为什么不返回上万条?那是因为后台数据库不大,只有 5 万多点的数据量。连个 Limit 都懒得用的项目还堂而皇之的上线运行了好几年到不重做差不多就没法用的地步。 我们来说说基于 Spri…https://www.ossez.com/t/spring-data-repository/14097

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!关于Spring Data JPA的分页查询,您可以按照以下步骤进行操作: 1. 首先,确保您的项目中已经引入了Spring Data JPA依赖,以及相关的数据库驱动依赖。 2. 创建一个继承自JpaRepository的接口,用于定义您的数据访问操作。例如: ```java import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository<User, Long> { // 在这里可以定义各种自定义的查询方法 } ``` 3. 在您的Service层或者Controller层注入该Repository,并使用其提供的分页方法进行查询。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserRepository userRepository; public Page<User> getUsersByPage(int pageNum, int pageSize) { PageRequest pageRequest = PageRequest.of(pageNum, pageSize); return userRepository.findAll(pageRequest); } } ``` 在上述示例中,我们通过调用`userRepository.findAll(pageRequest)`方法实现了分页查询,并传入`PageRequest`对象来指定页码和每页大小。 4. 最后,在您的Controller层中使用该Service方法来处理分页查询请求,并将结果返回给前端。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public Page<User> getUsersByPage(@RequestParam int pageNum, @RequestParam int pageSize) { return userService.getUsersByPage(pageNum, pageSize); } } ``` 在上述示例中,我们通过`@RequestParam`注解来接收前端传递的pageNum和pageSize参数,并调用UserService中的方法进行查询。 这样,您就可以使用Spring Data JPA进行分页查询了。希望能对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoneyMoose

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值