跟着JHipster学做项目 (12) 分页处理(上)后端利用Pageable进行分页查询

jhipster按条件查询再分页withPassword.zip jhipster按条件查询再分页 立即下载

JHipster的后端分页处理最大的特点是保持DTO类不受分页信息污染,不必包含分页相关属性,如页数,总数,排序等。

Controller类如下:

    @GetMapping("/users")
    public ResponseEntity<List<UserDTO>> getAllUsers(Pageable pageable) {
        final Page<UserDTO> page = userService.getAllManagedUsers(pageable);
        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
        return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
    }

Service类如下:我们可以看到通过利用Pageable接口代码变得十分简洁。

    public Page<UserDTO> getAllManagedUsers(Pageable pageable) {
        return userRepository.findAllByLoginNot(pageable, Constants.ANONYMOUS_USER).map(UserDTO::new);
    }

其中pageable参数通过简单对象属性匹配方式从前端传递过来:

/api/users?sort=id,desc&page=0&size=20

最核心的思路在于关于pageable的信息通过response的header传递回前端,以下是示例代码:

PaginationUtil.class

    public static <T> HttpHeaders generatePaginationHttpHeaders(UriComponentsBuilder uriBuilder, Page<T> page) {
        HttpHeaders headers = new HttpHeaders();
        headers.add(HEADER_X_TOTAL_COUNT, Long.toString(page.getTotalElements()));
        int pageNumber = page.getNumber();
        int pageSize = page.getSize();
        StringBuilder link = new StringBuilder();
        if (pageNumber < page.getTotalPages() - 1) {
            link.append(prepareLink(uriBuilder, pageNumber + 1, pageSize, "next"))
                .append(",");
        }
        if (pageNumber > 0) {
            link.append(prepareLink(uriBuilder, pageNumber - 1, pageSize, "prev"))
                .append(",");
        }
        link.append(prepareLink(uriBuilder, page.getTotalPages() - 1, pageSize, "last"))
            .append(",")
            .append(prepareLink(uriBuilder, 0, pageSize, "first"));
        headers.add(HttpHeaders.LINK, link.toString());
        return headers;
    }


    private static String prepareLink(UriComponentsBuilder uriBuilder, int pageNumber, int pageSize, String relType) {
        return MessageFormat.format(HEADER_LINK_FORMAT, preparePageUri(uriBuilder, pageNumber, pageSize), relType);
    }

    private static String preparePageUri(UriComponentsBuilder uriBuilder, int pageNumber, int pageSize) {
        return uriBuilder.replaceQueryParam("page", Integer.toString(pageNumber))
            .replaceQueryParam("size", Integer.toString(pageSize))
            .toUriString()
            .replace(",", "%2C")
            .replace(";", "%3B");
    }

下篇会讲述前端如何组装查询链接,以及如何处理后端传回的response.

Good Luck,

Cheers!

jHipster开发笔记,中文版 jHipster开发笔记,详细描述使用jHipster生成微服务的过程 立即下载

相关推荐

jhipster-pagination:JHipster具有Spring分页抽象

适用于jhipster的自述文件

JAVA问题随笔

学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、优快云 技术博客 3 篇

superpu1996的博客 512

Mamba vs YOLO:目标检测选型指南(附实际项目对比)

本文深入对比了Mamba和YOLO在目标检测领域的性能差异与应用场景。通过实际项目数据,分析了两者在城市交通监控、工业质检等场景下的表现,提供了详细的选型指南和部署优化建议,帮助开发者根据实时性、精度等需求选择最适合的解决方案。

weixin_29062255的博客 368

JSP中分页

<br />在使用数据库的过程中,不可避免的需要使用到分页的功能,可是JDBC的规范对此却没有很好的解决。对于这个需求很多朋友都有自己的解决方案,比如使用Vector等集合类先保存取出的数据再分页。但这种方法的可用性很差,与JDBC本身的接口完全不同,对不同类型的字段的支持也不好。这里提供了一种与JDBC兼容性非常好的方案。    <br />JDBC和分页   <br />Sun的JDBC规范的制定,有时很让人哭笑不得,在JDBC1.0中,对于一个结果集(ResultSet)你甚至只能执行next()操作

严润泉的专栏 739

CCF CSP历年题解(python)

菜鸡一枚,没参加过算法竞赛,单纯为了抵研究生考试复试才刷题,通过写博客记录下来,希望能和大家互相交流,代码质量不高,大家见谅。 因为考研等原因,题目不定期更新… 第一题 201312-1出现最多次数的数 ...

weixin_44690402的博客 5004

MATPOWER的安装详细教程

MATPOWER的安装包实际为一个程序包,安装教程很简单,详见本文。

半个月亮Zz的博客 3万+

跟着JHipster学做项目 (12) 分页处理(下)前端进行分页及排序查询

JHipster的前端分页组件由两部分组成:分页信息组件,分页加载组件。 <div v-show="users && users.length > 0"> <div class="row justify-content-center"> <jhi-item-count :page="page" :total="queryCount" :itemsPerPage="itemsPerPage"&g

java_augur的专栏 443

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 946

Spring Boot 利用Pageable插件实现分页和查询

Spring Boot 利用Pageable插件实现分页和查询 Pageable 是spring Data库中定义的一个接口,该接口是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息(例如pageNumber、pageSize等)。 Pageable定义了很多方法,但其核心的信息只有两个:一是分页的信息(page、size),二是排序的信息 第一步 在Dao包中书写个数据库的接口 @Query(value="select * from student inner join cla

噗嗤 1万+

集成库仑计移动电源设计:从原理到实战,实现精准电量管理

在电池供电设备中,精准的电量计量是提升用户体验和产品可靠性的核心技术。传统基于电压估算的方法因受温度、负载和老化影响误差较大,而库仑计技术通过直接测量充放电电流并对时间积分,实现了电荷量的直接计量,从根本上提升了精度。这项技术的核心价值在于为设备提供了真实、可靠的电量状态数据,是智能电池管理系统的基础。其应用场景广泛,从消费电子如移动电源、智能穿戴,到工业与汽车领域如储能系统、新能源汽车的电池管理都不可或缺。本文以移动电源为例,深入解析了集成库仑计方案的硬件设计要点,特别是围绕高精度采样电阻与差分放大器的电

weixin_33453726的博客 548

Excel数据分析实例

Excel数据分析实例 Excel数据分析五步走: 明确目的——观察数据——数据清洗——数据分析——数据可视化 数据是从Kaggle上下载的,牛油果的案例 目的 数据分析都是为了企业业务做得更好,这次案例主要针对于牛油果的销售量进行分析。 数据 检查是否有缺失值、是否一致化、是否有脏数据 分析 1.不同区域不同季度的牛油果价格走势 从上图中可以看出,东北地区的价格一直较高,而中南地区一直较低 2.2015-2018四年不同城市的销售总和 3.四年间不同城市的销售排名(降序排序) 可视化 1.四年间销

m0_53033371的博客 4367

Spring包下Pageable的使用 2

在使用Jhipster想实现用Pageable作为分页参数并返回Page对象时,需要注意的点是,这里page的值要从0开始 /api/company-users/withDelFlag?page=0&size=20 @GetMapping("/company-users/withDelFlag") public ResponseEntity<List<CompanyUser>> getAllCompanyUsersWithDelFlag(Pageable page

庄毕楠的博客 1326

Vue3 - vite 项目报错:Uncaught ReferenceError: require is not defined(解决 vue3 vite 项目无法识别 require 语法导致报错)

vue3,vite,报错解决,vue3+vite报错requireisnotdefined,vue3vite引插件不识别require,老插件必须用require怎么办,vite项目插件要求使用require引入但报错,vue3不兼容require导致第三方包插件无法使用,vue3vite中使用require报错怎么办,解决Vite+vue3使用第三方依赖报错“requireisnotdefined”问题,vite项目require语法兼容问题解决requireisnotdefine

🏆 前端领域优质创作者 2万+

JPA带过滤条件和分页的写法

【代码】JPA带过滤条件和分页的写法。

永远sayYES的博客 334

Vue3 - 强力解决前端下载二进制流pdf文件、下载成功后打开空白问题解决,或者获取PDF文件流,将blob对象转换成下载链接打开后一片空白(无论是否使用pdf插件下载,还是原生方法下载都完美解决)

vue3前端下载二进制流pdf文件,下载成功,打开空白问题解决,js下载PDF文件流,打开空白问题,VUE3 h5中的文件流下载和指定的url下载总结(解决下载后的pdf打开空白情况)pdfjs打开文件流空白,解决pdf文件流,预览全是空白页,pdf文件流,下载正常,但是预览全是空白页,前端JS获取PDF文件流,将blob对象转换成下载链接打开后一篇空白的问题,前端文件流下载后文件空白,前端下载文件流PDF文件显示空白 或 无法打开,在线预览PDF文件打不开白屏怎么办,前端axios请求二进制数据流转换生成

🏆 前端领域优质创作者 4616

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

用JDBC实现数据库分页

<br />文章转自:http://blog.youkuaiyun.com/zxingchao2009/archive/2010/08/11/5805375.aspx<br />感谢!!!<br /> <br />一、所需参数<br />(1)当前页数(currentPage)<br />就是来指明当前到底显示到了第几页<br />(2)每页显示的数目(pageSize)<br />比如每页显示20条<br />(3)总记录数(totalcount)<br />一般可由“select count(*) from tab

i am jacky 715

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

用jdbc实现分页

本文结合一个小demo主要介绍如何利用原生的jdbc实现分页技术。在我的上一篇博客中,我已经介绍了如何利用struts2搭建一个简单的图书检索系统,并实现检索功能,本文主要介绍如何对查询到的结果进行分页显示。利用jdbc进行分页显示的核心要点:①.sql语句要进行特殊处理使其能查询出按一定顺序排列的第n行到第m行,形如:select *from (select t.*,rownum rn from...

qq_33734094的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdbcTemplate 后台接口中的分页

Springboot+jdbcTemplate 对查询结果列表做分页, 之前开发的小项目,数据逐渐增多,每次返回所有的查询结果,耗费性能和时间 想到做分页。 于是从简单的分页做起。 jdbcTemplate中实现分页。 新增一个页面对象, 分页需要知道当前是第几页,每页多少条数, 一共有多少页。查询显示的列表信息。 更多的还有数据排序,按照哪一个字段进行、或者哪几个字段进行 升序或者...

weixin_33964094的博客 318

跟着JHipster学做项目 (17) Spring Boot处理分页和排序

JHipster利用了Spring Boot的Pageable分页机制,前端排序是针对数据库数据,而非当前页面数据,充分满足了实际需求。下面分前端和后端两部分分别介绍一下它的实现方式。 前端利用两个辅助函数,向后端传递了分页参数:当前页page,每页条目size,排序属性prop,direction。本文以mongoDB为例。 sort函数中接收了排序属性和排序方向,同序情况下以id降序。 public sort(): any { const result = [this.propOrd

java_augur的专栏 1452

使用pageable进行分页查询,并与sql语句中的limit的联系

Page<OrderMaster> orderMasterPage = orderMasterRepository.findAll(pageable); List<OrderDTO> orderDTOList = OrderMaster2OrderDTO.convertList(orderMasterPage.getContent()); //order...

奔跑的菜鸡 2046

后端数据交互传输的格式 以及优雅的写法(二)

场景:针对分页页面;我主要负责的bsm(异常监管系统),在查看他第一个功能分页查询,前后端交互的时候如何对PageRequest和PageResponse进行封装呢? 首先看下我们Controller的格式 文章目录PageRequest(Bsmpage+BaseRequest)封装 -- 使用统一封装格式前端所给的json文件后端PageRequest接受类设置接收param的类--拟用BizAlarmVo类接收。细节后端接收时间戳的格式后端接收时间的范围总结

qq_36737214的博客 685

分页方法的分装

遇到到很多分装方法,感觉这个是必须要有的就写一下 public void getPageBefore(PaginationUtil paginationUtil,List&lt;?&gt; list,HttpServletRequest request){ int pageSize = Integer.parseInt(request.getParameter("pageSize")); ...

lslby123的博客 557

MySQL 的 limit 分页查询及性能问题

通过limit实现分页查询。limit接收一个或两个整数型参数。如果是两个参数,第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目。。为了与PostgreSQL兼容,limit也支持【a取的记录数;b索引】。...

m0_54853503的博客 4958

Pageable 前台传参

Pageable 前台传参 满足分页和(多字段)排序的功能 前端请求方式如下 http://yyh.com/api_busi/visitxxx/logs?page=0&size=20&sort=id,desc&sort=score,desc page=0 size=25 sort=id,desc&sort=score,desc 后台controller接参方式如下 @GetMapping("logs") @ApiOperation(value = "查询日志", httpM

倚栏笑看花满楼的博客 3308

pageable设置size_Spring的Pageable分页剖析

PageRequest extends AbstractPageRequest 而 AbstractPageRequset implements Pageablefirst:写一个接受分页参数的PageRequest类(工具类)(这样就不用自己去写get、set等方法),当然也可以不写,直接使用对应的参数去接收(Controller层)public static PageRequest getGr...

weixin_39966376的博客 829

jpa Repository的常用写法总结

之前项目在xml中写sql,感觉标签有很多,比较灵活;最近在写新项目,使用了jpa,只能在java中写sql了,感觉不太灵活,但是也得凑付用。以下总结下常用入参出参写法。

BHSZZY的博客 2283
上一篇: 跟着JHipster学做项目 (11) stream和Optional的使用
下一篇: 跟着JHipster学做项目 (12) 分页处理(下)前端进行分页及排序查询
java_augur
博客等级 码龄22年 67粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值