Spring -Data-Jpa 多条件排序

简单的常用的就不多说了,这里纪录下项目中用到的几种排序场景

1. 多条件同序排序(全是正序/全是倒序)

Sort sort = isSnapshot ? new Sort(Sort.Direction.DESC, "isTop", "createTime"):new Sort(Sort.Direction.ASC, "state","createTime");

2. 不同顺序多条件排序(有正序有倒叙)

Sort sort = Sort.by(Sort.Order.asc("state"),Sort.Order.desc("createTime"));
//或者
Sort.by("state").ascending().and(Sort.by("createTime").descending())
//或者
List<Sort.Order> orders=new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.ASC,"state"));
orders.add(new Sort.Order(Sort.Direction.DESC,"createTime"));
Sort sort = Sort.by(orders);

3. 不同参数之间运算结果排序(此处根据两字段之和多条件排序做了简单封装)

public static Specification genResourceSpecification(ResourceShowQueryDto query,Integer resourceId) {
    return (root, criteriaQuery, criteriaBuilder) -> {
        List<Predicate> list = new ArrayList<>();
        list.add(criteriaBuilder.equal(root.get(TYPE), ResourceTypeEnum.FILE.name()));
        if (Objects.nonNull(resourcesId) && resourcesId.size() != 0) {
            CriteriaBuilder.In<Object> in = criteriaBuilder.in(root.get(ID));
            resourcesId.forEach(id -> in.value(id));
            list.add(in);
        }
        if(query.getOrderBy.equals("hot")){
            Expression<Integer> hotSort = criteriaBuilder.sum(root.get(READ_COUNT), root.get(LIKES_COUNT));
            criteriaQuery.orderBy(criteriaBuilder.desc(hotSort));
        }else{
            criteriaQuery.orderBy(criteriaBuilder.desc(root.get(sortRule)));
        }
        return criteriaBuilder.and(list.toArray(new Predicate[0]));
    };
}
4. 后来又遇到一个需求,根据一个字段的某个值来排序,没搞定,再研究下,有大神看到了,希望可以指点下,先谢为敬…

以上为手敲,如有错误请指正!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值