SpringBoot2 实现JPA分页和排序分页的案例

yizhihongxing

下面是关于“SpringBoot2 实现JPA分页和排序分页的案例”的完整攻略:

1. 简介

SpringBoot是一款轻量级的Java开发框架,它可以用来构建各种类型的Web应用程序。其中,JPA(Java Persistence API)是Java EE规范的一部分,用于管理Java对象和关系型数据库之间的映射关系。JPA的分页和排序功能在实际开发中非常有用。

2. 实现JPA分页

2.1 添加maven依赖

pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

pagehelper是一款用于Mybatis和Hibernate的分页插件,其与SpringBoot完美集成,同时也可以用于JPA分页。

2.2 添加Repository

@Repository
public interface UserRepository extends JpaRepository<User,Long> {
}

2.3 添加Service

@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserRepository userRepository;

    @Override
    public PageInfo<User> findPage(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        List<User> userList = userRepository.findAll();
        return new PageInfo<>(userList);
    }
}

2.4 添加Controller

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public PageInfo<User> getUsers(@RequestParam("pageNum")int pageNum,
                                        @RequestParam("pageSize")int pageSize){
        return userService.findPage(pageNum,pageSize);

    }
}

2.5 效果演示

启动SpringBoot应用,并访问http://localhost:8080/users?pageNum=1&pageSize=10,该接口将返回第1页每页10个用户的信息。

3. 实现JPA排序分页

3.1 添加Repository

@Repository
public interface UserRepository extends JpaRepository<User,Long> {

    //排序分页
    Page<User> findAll(Pageable pageable);
}

3.2 添加Service

@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserRepository userRepository;


    @Override
    public Page<User> findPageAndSort(int pageNum, int pageSize,String sortField,String sortOrder) {
        Sort sort = Sort.by(Sort.Direction.fromString(sortOrder),sortField);
        Pageable pageable = PageRequest.of(pageNum,pageSize,sort);
        return userRepository.findAll(pageable);
    }
}

3.3 添加Controller

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public Page<User> getUsers(@RequestParam("pageNum")int pageNum,
                                        @RequestParam("pageSize")int pageSize,
                                        @RequestParam(value = "sortField", defaultValue = "id")String sortField,
                                        @RequestParam(value = "sortOrder", defaultValue = "ASC")String sortOrder){
        return userService.findPageAndSort(pageNum,pageSize,sortField,sortOrder);

    }
}

3.4 效果演示

启动SpringBoot应用,并访问http://localhost:8080/users?pageNum=1&pageSize=10&sortField=age&sortOrder=DESC,该接口将返回第1页每页10个用户的信息,并按照age字段进行降序排序。

以上就是使用SpringBoot2实现JPA分页和排序分页的案例的完整攻略。

下面是两个示例说明:

示例1

需求:查询用户表中年龄大于等于18岁的用户,按照行id升序排序,取第1页,每页10个用户。

请求URL:http://localhost:8080/users?age=18&pageNum=1&pageSize=10&sortField=id&sortOrder=ASC

响应数据:

{
    "content": [
        {
            "id": 1,
            "name": "张三",
            "age": 18,
            "phone": "18888888888"
        },
        {
            "id": 2,
            "name": "李四",
            "age": 19,
            "phone": "17777777777"
        },
        ...
    ],
    "totalPages": 2,
    "totalElements": 13,
    "number": 1,
    "size": 10,
    "sort": [
        {
            "direction": "ASC",
            "property": "id",
            "ignoreCase": false,
            "nullHandling": "NATIVE",
            "ascending": true,
            "descending": false
        }
    ],
    "first": true,
    "last": false,
    "empty": false
}

示例2

需求:查询年龄大于等于20岁的用户,按照年龄降序排序,取第3页,每页20个用户。

请求URL:http://localhost:8080/users?age=20&pageNum=3&pageSize=20&sortField=age&sortOrder=DESC

响应数据:

{
    "content": [
        {
            "id": 17,
            "name": "小明",
            "age": 20,
            "phone": "16666666666"
        },
        {
            "id": 11,
            "name": "张三丰",
            "age": 20,
            "phone": "17777777777"
        },
        ...
    ],
    "totalPages": 1,
    "totalElements": 12,
    "number": 2,
    "size": 20,
    "sort": [
        {
            "direction": "DESC",
            "property": "age",
            "ignoreCase": false,
            "nullHandling": "NATIVE",
            "ascending": false,
            "descending": true
        }
    ],
    "first": false,
    "last": true,
    "empty": false
}

以上就是关于“SpringBoot2 实现JPA分页和排序分页的案例”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot2 实现JPA分页和排序分页的案例 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • springboot 如何添加webapp文件夹

    下面是详细讲解如何在Spring Boot项目中添加webapp文件夹的攻略: 创建Spring Boot项目 假设你已经成功创建了一个Spring Boot项目,并且该项目使用了Maven作为项目管理工具。如果还没有创建项目,请按照官方文档进行创建。 在Maven中添加webapp文件夹 一般来说,Spring Boot默认会使用resources/sta…

    Java 2023年6月15日
    00
  • java使用Socket类接收和发送数据

    Java 中使用 Socket 类来实现网络通讯,可以通过 Socket 类的 send 和 receive 方法实现数据传送。我们可以通过以下步骤来实现 Socket 类的数据发送和接收: 创建 Socket 实例并连接服务器 在使用 Socket 类实现数据传输前,需要先创建 Socket 实例。通过传入目标主机和端口号作为参数,我们可以实现与目标主机的…

    Java 2023年5月26日
    00
  • Java递归如何正确输出树形菜单

    Java递归可以非常方便地实现树形菜单的输出,具体实现步骤包括: 第一步:定义树形结构 在Java中,可以通过定义一个类来表示树形结构,类中包含一个名称、一个值和一个子节点列表。代码如下: public class TreeNode { private String name; // 名称 private String value; // 值 private…

    Java 2023年5月26日
    00
  • 如何把JAR发布到maven中央仓库的几种方法

    下面是如何将JAR包发布到Maven中央仓库的几种方法的完整攻略: 方法一:使用Maven发布插件 首先,在你的项目中加入Maven发布插件: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <art…

    Java 2023年5月20日
    00
  • Java String类正则操作示例

    Java String类正则操作示例 简介 Java中String类提供了很多方法进行正则表达式的操作。通过使用正则表达式,我们可以在字符串中匹配特定的字符或者模式,进行替换或者搜索等操作。在这篇文章中,我们将学习String类操作正则表达式的方法,并且提供两个实际的示例说明。 String类操作正则表达式的方法 Java String类提供了以下方法来操作…

    Java 2023年5月27日
    00
  • org.apache.ibatis.binding.BindingException异常报错原因以及详细解决方案

    先给一下org.apache.ibatis.binding.BindingException异常的概述: BindingException是MyBatis中的绑定异常,当Mapper接口和Mapper映射文件出现错误时抛出。在MyBatis中,Mapper接口和Mapper映射文件是对应绑定的,如果Mapper接口方法的参数、返回值类型或SQL语句等配置错误…

    Java 2023年5月27日
    00
  • 关于springboot-starter-undertow和tomcat的区别说明

    下面将为您详细讲解关于springboot-starter-undertow和tomcat的区别说明。 1. 概述 在Spring Boot中,官方提供了两个常用的Web容器:Tomcat和Undertow。这两个Web容器的区别主要集中在以下几个方面: Tomcat是一个传统的、基于Servlet的Web容器,而Undertow则是Wildfly应用服务器…

    Java 2023年5月19日
    00
  • Java实现输出回环数(螺旋矩阵)的方法示例

    以下是Java实现输出回环数(螺旋矩阵)的方法示例的完整攻略: 目录 什么是回环数 方案分析 Java实现方案 示例1 示例2 什么是回环数 回环数,也叫螺旋矩阵,是一个由外向内逐层递进的n * n矩阵。例如n = 4时,回环数如下所示: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 在这个矩阵中,1-4是第一层,5-14是第…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部