使用Spring Data JPA的朋友,在实际工作中经常需要用到分页查询。下面介绍一个简单的分页查询的例子:查询学生信息,每页10行数据,并按成绩排序。先看数据表:

实现:repo需要继承PagingAndSortingRepository,如下:

public interface StudentRepo extends CrudRepository<StudentEntity, String>,         JpaSpecificationExecutor,PagingAndSortingRepository<StudentEntity, String> {
}

需要用到PageRequest,我们来看一下PageRequest(为方便查看,本人去掉了部分内容,并增加了注释):

public class PageRequest extends AbstractPageRequest {private static final long serialVersionUID = -4541509938956089562L;private final Sort sort;//简单的,指定页码和每页行数public PageRequest(int page, int size) {this(page, size, null);}//指定页码、每页行数、排序public PageRequest(int page, int size, Direction direction, String... properties) {this(page, size, new Sort(direction, properties));}//指定页码、每页行数、排序public PageRequest(int page, int size, Sort sort) {super(page, size);this.sort = sort;}//下一页public Pageable next() {return new PageRequest(getPageNumber() + 1, getPageSize(), getSort());}//上一页public PageRequest previous() {return getPageNumber() == 0 ? this : new PageRequest(getPageNumber() - 1, getPageSize(), getSort());}//第一页public Pageable first() {return new PageRequest(0, getPageSize(), getSort());}
}

我们发现,PageRequest提供了很多构造方法,根据实际情况灵活选择。下面看实现代码:

    public void queryStudentByPage() {//按分数倒序排列Sort sort = new Sort(Sort.Direction.DESC,"score");//构造PageRequest分页条件,第一页、每页10行、排序条件PageRequest pageRequest = new PageRequest(0,10, sort);Page<StudentEntity> page = studentRepo.findAll(pageRequest);List<StudentEntity> studentEntities = page.getContent();for (StudentEntity studentEntity : studentEntities) {System.out.println(studentEntity.toString());}}

查询结果如下:

Hibernate: selectstudentent0_.id as id1_0_,studentent0_.address as address2_0_,studentent0_.birthday as birthday3_0_,studentent0_.name as name4_0_,studentent0_.school as school5_0_,studentent0_.score as score6_0_,studentent0_.tel as tel7_0_ fromt_student studentent0_ order bystudentent0_.score desc limit ?
Hibernate: selectcount(studentent0_.id) as col_0_0_ fromt_student studentent0_StudentEntity{id='6c09a952f5b9474fb56996db642e7bab', name='沙鸿飞', address='玉龙小区', tel='12314512312311', school='青大附中', birthday='2001-03-01', score=99}
StudentEntity{id='c46800036ea94caea07c1f2b90576c2f', name='赵继峰', address='菜市场', tel='12314512312311', school='大庆中学', birthday='2002-03-11', score=99}
StudentEntity{id='6b2bc83ff6ea4f7aa95986e3eeb1883f', name='赵六', address='玉龙小区', tel='12314512312311', school='青大附中', birthday='2001-03-01', score=98}
StudentEntity{id='76a5fad795aa4605b43daf9c5f4e8edd', name='张逸杰', address='菜市场', tel='12314512312311', school='胜利中学', birthday='2002-03-11', score=98}
StudentEntity{id='81fbeb9e7e8749e78c2495e169766274', name='吕春芳', address='柏景湾', tel='12314512312311', school='实验中学', birthday='2000-03-11', score=98}
StudentEntity{id='b6ef1f42e8a64367abc251af22246870', name='郎芬', address='菜市场', tel='12314512312311', school='西城中学', birthday='2001-03-11', score=98}
StudentEntity{id='bc56bad3fd4e4604abe8a1c4ee2c1f66', name='李海峰', address='菜市场', tel='12314512312311', school='明湖中学', birthday='2002-02-11', score=98}
StudentEntity{id='ded2215cfbb846d296aece2531bce6b8', name='赵九', address='岩石寨', tel='12314512312311', school='中山一小', birthday='2001-01-01', score=98}
StudentEntity{id='e838a9fbbd4240d5a0922d1112b2171d', name='钱十', address='南淮安', tel='12314512312311', school='西城中学', birthday='2001-03-31', score=98}
StudentEntity{id='babee95b37c04db38c0e74d923521ec5', name='钱十', address='南淮安', tel='12314512312311', school='山大附中', birthday='2001-03-11', score=89}

通过控制台打印出的sql我们发现里面通过limit限定返回从第几行到第几行的数据,另外发现不光查询了前10行的数据,还统计了总条数。那是因为返回的结果Page提供getTotalPages(获取总页数)、getTotalElements(获取总行数)等方法,需要在查询的时候获取总的数据行数。

Spring Data JPA分页查询相关推荐

  1. spring data jpa 分页查询

    法一(本地sql查询,注意表名啥的都用数据库中的名称,适用于特定数据库的查询) public interface UserRepository extends JpaRepository<Use ...

  2. Spring data jpa 条件查询-按时间段查询

    Spring data jpa 条件查询-按时间段查询 @Overridepublic Page<泛型> findRecordList(int couponDetailId, int pa ...

  3. Spring Data JPA 实例查询

    转自:https://www.cnblogs.com/rulian/p/6533109.html 一.相关接口方法 在继承JpaRepository接口后,自动拥有了按"实例"进行 ...

  4. Spring Data JPA 条件查询的关键字

    Spring Data JPA 为此提供了一些表达条件查询的关键字,大致如下: And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(Stri ...

  5. Spring Data JPA 分页

    最近在使用Spring Boot 做项目时遇到了关于Spring Data JPA的分页问题,在下面这位大兄弟的博客中有代码实现 LINK: 博客链接 DAO接口: package com.demo. ...

  6. Spring Data JPA 条件查询 分页查询

    条件查询 //Label : 实体类,传过来的参数 labelDao.findAll(new Specification<Label>(){@Overridepublic Predicat ...

  7. Spring data jpa 动态查询封装

    最近几天学习一下jpa,发现在动态查询方面支持不是很好,一个包含多种动态查询条件的列表需要写大量的代码,而我本身有强迫症,代码有洁癖,大量的重复的代码,自然不爽,于是就.......,废话少说,直接上 ...

  8. Spring data jpa Specification查询关于日期的范围搜索

    代码: 时间格式化类型: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat s ...

  9. ORM框架之Spring Data JPA(三)高级查询---复杂查询

    一.spring data jpa高级查询 1.1Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data ...

最新文章

  1. Linux上PHP加入环境变量
  2. P1024 一元三次方程求解(递归式二分)
  3. python manager详解_Python通过Manager方式实现多个无关联进程共享数据
  4. python中的encode()和decode()函数
  5. OpenCASCADE绘制测试线束:数据交换命令之XDE 颜色命令
  6. 修改记录功能--jsp,servlet
  7. jQuery 判断所有图片加载完成
  8. 2007 Office System Video
  9. 今日之“烧饼油条”!
  10. bootstrap modal远程加载的两种方式
  11. Simple-RNN with Keras
  12. freetextbox java_FreeTextBox的应用技巧
  13. 谷歌卫星地图下载器与万能地图下载器功能比较
  14. vb6.0企业版id_国网公司十八项反措(2018版)开关设备专题解读
  15. OPTEE学习笔记 - IPC
  16. java虚拟机 for win7 64位_最新win7 64位旗舰版安装版下载(64位iso镜像)
  17. c语言8bit转10bit,10bit视频转码成8bit视频教程(非常简单)
  18. 【转】Ogre 1.7版本重大改进by 诡辩
  19. Python海龟画图 画一个爱心 赶快给女朋友来一个
  20. java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager acti

热门文章

  1. 云计算厂商决战2020:虽分高下,但不决生死
  2. 计算机音乐数字乐谱牵丝戏,天谕手游牵丝戏乐谱代码是什么-天谕手游牵丝戏乐谱代码分享_快吧手游...
  3. 符合Web标准的表格——CSS表格
  4. 粉丝突破1600,我感到一丝愧疚
  5. Faststone Capture怎么打开视频编辑器
  6. fitbit手表中文说明书_最佳Fitbit:哪一个适合您?
  7. 一次把 Unicode 和 UTF-8 说清楚
  8. 计算机输入知识竞赛简讯,计算机学院积极参与“不忘初心之感知我矿大”知识竞赛...
  9. 关于算法工程师,你想知道的都在这里!
  10. End-to-End(端到端)的理解