java 条件分页 笔记,Spring Jpa Data多条件分页查询

目录

说到多条件查询,大家肯定会想到继承JpaSpecificationExecutor,但是多条件查询如何实现呢,进入JpaSpecificationExecutor中有这样的一个方法:

Page findAll(Specification spec, Pageable pageable);

我们只需构建一个Specification,就能实现多条件分页查询,具体实现就不细说了,直接看代码。

Repository

public interface MovieRepository extends JpaRepository,JpaSpecificationExecutor,

Serializable{

}

Service

public Page findAllMovie(Pageable pageable,String status,String rank) {

logger.info("Select all Movie");

pageable = PageUtil.getPageRequest(pageable.getPageNumber(), null);

Specification querySpecification = (Specification) (root, query, cb) -> {

List predicates = new ArrayList<>();

query.orderBy(cb.desc(root.get("id").as(Integer.class)));

if (status != null) {

predicates.add(cb.equal(root.get("status"), status));

}

if ("hot".equals(rank)) {

query.orderBy(cb.desc(root.get("clicks").as(Integer.class)));

}

return cb.and(predicates.toArray(new Predicate[predicates.size()]));

};

return movieRepository.findAll(querySpecification,pageable);

}

PageUtil

分页我们写一个工具类来指定默认页,默认大小,排序方式。

public class PageUtil {

public static PageRequest getPageRequest(Integer pageNumber, Integer pageSize, String field) {

Sort sort = null;

//默认页面为0,

if (pageNumber == null || pageNumber < 1) {

pageNumber = 0;

} else {

pageNumber = pageNumber - 1;

}

//默认页面大小18

if (pageSize == null || pageSize < 1) {

pageSize = 18;

}

//默认采用ID倒叙排列

if (field == null) {

sort = null;

}else {

sort = new Sort(Sort.Direction.DESC, field);

}

return new PageRequest(pageNumber, pageSize, sort);

}

public static PageRequest getPageRequest() {

return getPageRequest(null, null, null);

}

public static PageRequest getPageRequest(Integer pageNumber, Integer pageSize) {

return getPageRequest(pageNumber, pageSize, null);

}

}

Controller

@GetMapping(value = "index")

public Page index(Pageable pageable,String status,String rank){

return movieService.findAllMovie(pageable,status,rank);

}

调用测试:/index?page=xxx&size=10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值