Java 关于SpringbootJPA分页及排序

摘要:
创建一个Pageable对象已经在互联网上看到了很多博客。他们正在使用newPageRequest方法创建Pageable对象。可分页实现类的构造方法具有Sort参数,可以根据列属性对其进行排序。通过查看Sort类的构造方法,我们分析了Sort类。Sort类中有几种构造方法:publicSort;公共排序;公共排序;公共排序;公共排序;关于这些构造方法,其中Direction用于根据列属性确定是按升序还是降序排序。Page:页数,从0开始,默认为页面0大小:每页的大小,默认为10sort:对相关信息进行排序,并按照“property[,ASC|DESC]”的方式进行组织,例如,“sort=firstname&sort=lastname,DESC”表示根据firstname的正顺序按姓氏的相反顺序排列。

创建Pageable对象

看了网上很多博客,都是在用 new PageRequest的方法创建Pageable对象。可是估计很多同学写了之后才发现原来这个方法作者已经标记为过时了;

替代的方法是不要new PageRequest,而是直接用 PageRequest.of这个方法 根据你的需求选择入参;

下面贴出对比

@Override
@Transactional(readOnly = true)  // 只读事务
public Page<People> getPage(Integer pageNum, Integer pageLimit) {
        Pageable pageable = new PageRequest(pageNum - 1,pageLimit);
        return jpaRepo.findAll(pageable);
}

@Override
@Transactional(readOnly = true)  // 只读事务
public Page<People> getPage(Integer pageNum, Integer pageLimit) {
    Pageable pageable = PageRequest.of(pageNum - 1,pageLimit);
    return jpaRepo.findAll(pageable);

}

多条件排序

例如需要实现一个形如下面的sql:

select * from table where a='a' and b='b' order by c asc,d desc;

就是根据两个条件进行排序。
pageable实现类的构造方法中有个Sort参数,可以按照列属性进行排序。通过查看Sort类的构造方法,我们对Sort这个类进行一下分析,Sort类中存在一下几个构造方法:

public Sort(Order... orders);
 
public Sort(List<Order> orders);
 
public Sort(String... properties);
 
public Sort(Direction direction, String... properties);
 
public Sort(Direction direction, List<String> properties);

大概这几种构造方法,其中Direction 是用来标识按照列属性升序还是降序排序的。

properties即为列属性。

因为我们要排列的两个属性升序和降序都存在,4、5方法由于只能够实用一种排序方向,所以不能采用。

方法3只是输入列属性,按照默认的排序方式(ASC),因此也不能满足要求。

接下来我们看构造方法1和2,性质相同,主要是Order类的用途是怎样的。

看一下Order类的构造方法:

public Order(Direction direction, String property);

可以看到一个Order维护一个Direction 和一个列属性,正式我们所要的。

所以采用如下的方法:

List< Order> orders = new ArrayList< Order>();
orders.add( new Order(Direction. ASC, "c"));
orders.add( new Order(Direction. DESC, "d"));
Pageable pageable = PageRequest.of(pageNumber, pageSize, new Sort(orders));
jpaRepo.findByAAndB(a,b,pageable);

@PageableDefault

@PageableDefault注解的源码定义

package org.springframework.data.web;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.data.domain.Sort.Direction;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface PageableDefault {
    int value() default 10;

    int size() default 10;

    int page() default 0;

    String[] sort() default {};

    Direction direction() default Direction.ASC;
}

@PageableDefault(sort = {"name"}, direction = Sort.Direction.ASC)注解表示默认以name正向排序,size默认为10个,page默认为第0页。

page :第几页,从0开始,默认为第0页
size :每一页的大小,默认为10
sort :排序相关的信息,以`property[,ASC|DESC]`的方式组织,例如`sort=firstname&sort=lastname,desc`表示在按firstname正序排列基础上按lastname倒序排列。

免责声明:文章转载自《Java 关于SpringbootJPA分页及排序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql灾备演练问题Windows10 ntoskrnl.exe占用大量的磁盘空间(100%)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SqlServer nvarchar中的中文字符匹配,更改SqlServer实例和数据库排序规则的办法

我们都知道在SqlServer中的nvarchar类型可以完美的存储诸如中文这种unicode字符,但是我们会发现有时候查询语句去查询nvarchar列的时候查不出来。 为什么nvarchar类型有时候需要前面带N的字符串才能查出结果 比如假如现在有一张表T_UserInfo如下,其中列[Name]为nvarchar类型用于存储中文姓名: CREATE T...

SQL优化(Oracle)

(转)SQL优化原则一、问题的提出  在应用系统开发初期。因为开发数据库数据比較少。对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,可是假设将应用系统提交实际应用后,随着数据库中数据的添加。系统的响应速度就成为眼下系统须要解决的最基本的问题之中的一个。系统优化中一个非常重要的方面就是SQL语句的优化。对于海量数据,劣质SQL...

习题解答chapter02

1. 对象与对象引用的区别是什么? 创建案例代码: public class Study{ // 默认构造方法 public Study{ } } 对象创建操作Study temp = new Study();语句解读: 左边的“Study temp”创建了一个Stu...

Java 面向对象(六)类的成员 之 构造器(构造方法)

一、构造器   构造器又称构造方法,是为了创建对象和初始化对象所产生的。 二、构造器的特征   1、它具有与类相同的名称。   2、它不声明返回值类型。(与声明为 void 不同)   3、不能与 static、final、synchronized、abstract、native 修饰,不能有 return 返回值; 三、构造器的作用   作用:     ...

vue进行代码排序

<template> <div> <div> <h3>排序 </h3> <button @click="orderByAge(0)">默认</button> <button @click="orderByAge(2)">...

Java 基础之详解 Java 反射机制

一、什么是 Java 的反射机制?   反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。  一般而言,当用户使用一个类的...