业务场景
公司前端框架引用了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);
}

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

3万+

被折叠的 条评论
为什么被折叠?



