JPA多表联查笔记

上手比较麻烦,首次写需好好了解(root, query, builder)

        Specification<Object1> cation = (root, query, builder) -> {
            List<Predicate> predicates= new ArrayList<>();
            //单个条件
            if (StringUtils.hasText(params)) {
                predicates.add(builder.equal(root.get("fieId"), params));
            }
            //多条件or
            if (StringUtils.hasText(params)) {
                Predicate params1= builder.like(root.get("fieId1"), "%" + params+ "%");
                Predicate params2= builder.like(root.get("fieId2"), "%" + params+ "%");
                Predicate params3= builder.like(root.get("fieId3"), "%" + params+ "%");
                predicates.add(builder.or(params1, params2, params3));
            }
            //验证通过,多表联查
            if (StatusCodeConstant.INSURED.equals(status)) {
                predicates.add(builder.equal(root.get("status"), status));
                //此处在主表实体标注关联ID @OneToMany(mappedBy = "id")
    			//private List<Object2> object2;
                Join<Object1, Object2> join = root.join("object2", JoinType.LEFT);
                predicates.add(builder.between(builder.currentDate(), join.get("startDate"), join.get("endDate")));
            }
            //日期条件查询
            predicates.add(builder.not(builder.between(builder.currentDate(), join.get("startDate"), join.get("endDate"))));
            if (predicates.size() > 0) {
                return builder.and(predicates.toArray(new Predicate[predicates.size()]));
            }
            return builder.conjunction();
        };
        Pageable pageable = PageRequest.of(page - 1, size, Sort.by("fieId"));
        Page<Object1> pageInfo = object1Repository.findAll(cation, pageable);
    	//略标注简写,注意看源码JPA比较全面想要的都有
        return Result.success().put("data", pageInfo.getContent()).put("totalPages", pageInfo.getTotalPages()).put("page", page).put("count", pageInfo.getTotalElements());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值