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

下面是关于“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日

相关文章

  • JSP中一些JSTL核心标签用法总结

    下面是关于“JSP中一些JSTL核心标签用法总结”的完整攻略: JSP中一些JSTL核心标签用法总结 JSTL是JSP标准标签库,提供了在JSP页面中进行流程控制、条件判断、数据遍历等操作的标签库。JSTL核心标签库是JSTL标签库的核心部分,包含了最基本、使用频率最高的标签。 1.引入JSTL标签库 在使用JSTL标签之前,需要先引入JSTL库,在JSP页…

    Java 2023年6月15日
    00
  • ASP.NET使用ajax实现分页局部刷新页面功能

    下面是使用ASP.NET和Ajax实现分页局部刷新页面的攻略。 简介 ASP.NET和Ajax可以帮助我们实现动态的网页应用,其中的分页功能是常用的需求之一。通常,对于大的数据集,我们需要将其分页显示,而且需要在用户浏览时进行快速的局部刷新,以提高用户体验。 步骤 下面是实现分页局部刷新页面功能的步骤: 1.设计后端页面 首先需要在服务器端设计好页面,可以采…

    Java 2023年6月16日
    00
  • React Native JSI实现RN与原生通信的示例代码

    React Native JSI 是 React Native 的一个新特性,它可以实现 RN 与原生端的通信。JSI 基于 C++,所以可以很好地利用移动设备的 CPU 和 GPU 功能,从而提高应用程序的性能和可维护性。 要使用 RN JSI,需要在项目中安装相应的模块和库,例如 Folly 和 TurboModules。接下来,我们将详细讲解如何在 R…

    Java 2023年6月15日
    00
  • 基于jdbc处理Clob的使用介绍

    下面我来给您讲解一下“基于JDBC处理CLOB的使用介绍”: 什么是CLOB CLOB(Character Large Object)是一种LOB类型,它用于存储大文本数据。通常情况下,如果我们想要存储文本大于4KB,就需要使用CLOB。 JDBC中处理CLOB的方式 在Java中,我们可以使用JDBC来访问和操作数据库。当我们需要从数据库中读取CLOB字段…

    Java 2023年6月16日
    00
  • Java实现飞机小游戏

    Java实现飞机小游戏完整攻略 准备工作 在开始编写代码之前,必须先了解一些基本知识,包括 Java 语言基础、图形化用户界面设计、多线程等。 另外,本游戏中所需要的资源(如图片、音频等)也需要提前准备好,以便在代码中调用。 设计游戏场景 为了实现一个良好的游戏体验,我们需要先设计并实现游戏场景。具体来说,我们需要确定游戏窗口的大小、背景图片、游戏音效等。此…

    Java 2023年5月19日
    00
  • 解决JavaWeb读取本地json文件以及乱码的问题

    针对“解决JavaWeb读取本地json文件以及乱码的问题”,我提供以下完整攻略: 1. 确认本地json文件的格式和编码类型 在读取本地json文件时,首先需要确认文件的格式和编码类型。常见的json格式有两种:一是普通json格式,文件后缀为.json;二是jsonp格式,文件后缀为.js,其中以javascript对象的方式来表示json数据。 接下来…

    Java 2023年5月26日
    00
  • Java split函数拆分后变成null问题解决方案

    Java中的split函数用于将字符串根据指定字符分割成多个子字符串。然而,有时候在使用split函数时,会出现拆分之后子字符串变成null的问题,本篇文档将提供解决方案。 问题分析 在使用split函数时,使用的分割符在字符串的开头或结尾时,会导致split函数将空字符串分割出来。此时,split函数会把空字符串转换为null,导致出现这个问题。 解决方案…

    Java 2023年5月26日
    00
  • 超详细介绍idea中java程序打jar包的两种方式

    下面为您详细介绍IDEA中Java程序打jar包的两种方式。 一、通过Maven插件打jar包 1. 配置Maven 首先需要保证您的项目已经配置好了Maven,可以在IDEA的Settings中查看。 2. POM文件配置 然后,在Maven所管理的工程项目的pom.xml文件中加入以下代码: <build> <plugins> &…

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