创建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分页及排序的更多相关文章

  1. Ecside基于数据库的过滤、分页、排序

    首先ecside展现列表.排序.过滤(该三种操作以下简称为 RSF )的实现原理完全和原版EC一样, 如果您对原版EC的retrieveRowsCallback.sortRowsCallback.fi ...

  2. SpringBoot JPA实现增删改查、分页、排序、事务操作等功能

    今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查.分页.排序.事务操作等功能.下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and ...

  3. spring-data-jpa 介绍 复杂查询,包括多表关联,分页,排序等

    本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...

  4. 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

    Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...

  5. 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView

    最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷 ...

  6. DWZ分页、排序失效小结

    1. 在视图文件中与分页相关的代码段 <form id="pagerForm" method="post" action="w_list.htm ...

  7. 整合Spring Data JPA与Spring MVC: 分页和排序

    之前我们学习了如何使用Jpa访问关系型数据库.比较完整Spring MVC和JPA教程请见Spring Data JPA实战入门,Spring MVC实战入门. 通过Jpa大大简化了我们对数据库的开发 ...

  8. java提供的默认list排序方法-转

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...

  9. ngTbale假分页实现排序、搜索、导出CSV等功能

    一. ngTable功能简化 使用ngTable经常有分页,排序,过滤等功能,实现诸多功能较为麻烦.为了方便开发过程,可以抽取一些table共同点写一个公有方法. 注意: 1. 由于很多特别的需求,可 ...

随机推荐

  1. mac 的 ping 命令怎么停掉?

    Widnows下的Ping不会只Ping4次,mac 会不停的Ping下去,需要停止,按下键盘上的 control+c 键即可停掉 Ping 过程.

  2. 向android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  3. 为Sublime Text 3设置优雅的字体

    本文使用的Sublime Text 3版本是3.2.1(build 3207),这个版本默认对中文的支持很糟糕,中国程序员很费眼睛,需要做一番设置. 首选需要在本机安装漂亮的字体,我们选用的是YaHe ...

  4. Windows Server系统定时任务备份ORACLE数据库

    Windows Server系统定时任务备份ORACLE数据库 一.编辑备份脚本 RMAN备份数据库 1.在备份脚本目录下,创建bat文件db_rman.bat set ORACLE_SID=orcl ...

  5. Linux内核中的cmpxchg函数

    http://www.longene.org/forum/viewtopic.php?t=2216 前几天,为了这个函数花了好多时间,由于参考的资料有误,一直都没有看明白,直到google之后,总算搞 ...

  6. java dwg转svg

    package com.example.demo.dxf2svg; import com.aspose.cad.InterpolationMode; import com.aspose.cad.Smo ...

  7. EDM数据:如何选择邮件服务器平台

    博主知道有不少的企业和个人都在寻找邮件服务器平台,下面博主从下面几个方面给大家介绍一下如何选择. 一.列表管理功能是否完善. 一般一个好的邮件服务器平台系统都有完善的列表管理功能.列表管理功能是指邮件 ...

  8. JavaScript对象---递归遍历对象

    JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 St ...

  9. Python Module_pdb_DEBUG 方法

    目录 目录 pdb pdb 的 Debug 方式 pdb 的调试指令 示例 IPython 自带的 Debug 工具 ipdb pdb pdb 是 Python 自带的程序包,为 Python 程序提 ...

  10. 函数传参和firture传参数request

    前言 为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数.比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行.但 ...