Jpa条件查询组合查询and和or同时用

 Pageable pageable = PageRequest.of(request.getPage(), request.getPageSize(), Sort.by(Sort.Direction.DESC, "id"));
        Page<Produce> producePage = produceRepo.findAll(
                new Specification() {
                    @Override
                    public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
                        //WHERE del_flag=0 AND status=1 AND ((title like "%keyword%") OR (content like "%keyword%")  OR (music_title like "%keyword%"))
                        List<Predicate> pListAnd = new ArrayList<Predicate>();
                        // 删除标记:0-正常1-删除
                        pListAnd.add(cb.equal(root.get("delFlag"), DelFlag.NORMAL));
                        // 状态: 0-禁用 1-启用
                        pListAnd.add(cb.equal(root.get("status"), Status.OPEN));
                        Predicate[] psAnd = new Predicate[pListAnd.size()];
                        Predicate preAnd = cb.and(pListAnd.toArray(psAnd));

                        List<Predicate> pListOr = new ArrayList<Predicate>();
                        //标题
                        if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
                            pListOr.add(cb.like(root.get("title").as(String.class), "%" + request.getKeyword() + "%"));
                        }
                        //内容
                        if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
                            pListOr.add(cb.like(root.get("content").as(String.class), "%" + request.getKeyword() + "%"));
                        }
                        //音乐标题
                        if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
                            pListOr.add(cb.like(root.get("musicTitle").as(String.class), "%" + request.getKeyword() + "%"));
                        }
                        Predicate[] psOr = new Predicate[pListOr.size()];
                        if (pListOr.size() > 0) {
                            Predicate preOr = cb.or(pListOr.toArray(psOr));
                            query.where(preAnd, preOr).getRestriction();
                        } else {
                            query.where(preAnd).getRestriction();
                        }
                        return null;
                    }
                }, pageable);

注意:JPA分页索引从0开始,Mybatis-Plus分页索引从1开始。 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值