JPA 扩展SimpleJpaRepository.findAll,支持页数为-1的全部查询

本文介绍了如何在使用Spring JPA时,针对前端框架datatable.js选择“全部”分页时,后端实现全量查询的方法。通过分析datatable.js源码发现,选择“全部”时页数参数为-1。然后在JPA的SimpleJpaRepository中,当页数判断为-1时,将Pageable设置为null以获取所有数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景

公司前端框架引用了datatable.js,分页格式如下图所示,支持10,20,50,100,全部,前面数字页面可直接通过Spring组装对象传入JPA完成分页,但全部查询失败。
这里写图片描述

解决方案

1、查找datatable.js源码中关于分页参数,找到如下代码
"lengthMenu": [[10, 20, 50, 100, -1],[10, 20, 50, 100, "全部"]],

由此可知当我们页面选择“全部”的时候,页面传入后台页数参数为-1

2、查找JPA中的关于“查找全部”函数,找到如下符合我们判断页数的函数
    public Page<T> findAll(Specification<T> spec, Pageable pageable) {
        TypedQuery<T> query = getQuery(spec, pageable);
        return pageable == null ?
                       new PageImpl<T>(query.getResultList()) : readPage(query, pageable, spec);
    }

由此可知,JPA中判断了pageable是否为空,为空的时候返回全部内容,不为空的时候根据请求的页数请求对应的分页数据。 因此只要我们在这里支持页数为-1的时候分页即可,判断为-1的时候我们置pageable=null,这样就可以返回全部数据了,新增代码之后的代码下

    public Page<T> findAll(Specification<T> spec, Pageable pageable) {
        TypedQuery<T> query = getQuery(spec, pageable);
        /**新增内容开始*/
        //当判断前台传来的页数为-1的时候,手动置pageable为null
        if(pageable.getPageSize()==-1){
            pageable = null;
        }
        /**新增内容结束*/
        return pageable == null ?
                       new PageImpl<T>(query.getResultList()) : readPage(query, pageable, spec);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值