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

来源:互联网 发布:网站内链优化 编辑:程序博客网 时间:2024/06/07 10:29

业务场景

公司前端框架引用了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);    }
原创粉丝点击