SpringBootJpa 实现多条件复杂查询and (xx ord xx)

41 篇文章 0 订阅
9 篇文章 0 订阅

首先定义一个接口继承JpaRepository 和JpaSpecificationExecutor。

package com.yaoyanshe.crf.dao;

import com.yaoyanshe.crf.model.CrfMo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

/**
 * <p>
 * CRF版本 服务类
 * </p>
 *
 * @author tan.wei
 * @since 2021-03-09
 */
@Repository
public interface CrfMoDao extends JpaRepository<CrfMo,Long>, JpaSpecificationExecutor<CrfMo> {


}
@Override
public Page<CrfMoResponse> findPage(CrfPage page) {
    Sort sort = new Sort(Sort.Direction.DESC, "createTime");
    Pageable pageable = new PageRequest(page.getPageNo(), page.getPageSize(), sort);
    CrfMo crfMo = new CrfMo();
    crfMo.setIsDeleted(0);
    if(Objects.nonNull(page.getProjectId())){
        crfMo.setProjectId(page.getProjectId());
    }
    Example<CrfMo> example = Example.of(crfMo);
    Page<CrfMo> crfMoPage = crfMoDao.findAll(new Specification<CrfMo>() {
        @Override
        public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
            Predicate isDeleted = criteriaBuilder.equal(root.get("isDeleted"), crfMo.getIsDeleted());
            Predicate projectId = criteriaBuilder.equal(root.get("id"), crfMo.getProjectId());
            Predicate or = criteriaBuilder.or(projectId, isDeleted);
            return criteriaBuilder.and(or);
        }
    }, pageable);
    return  ObjectUtils.build(Page.class,crfMoPage);
}


@Override
    public DataPageResponse QueryList(PageMoRequest request) {
        Sort sort = new Sort(Sort.Direction.DESC, "createTime");
        PageRequest pageable = PageRequest.of(request.getPageNo() - 1, request.getPageSize(), sort);
        DataPageMo dataPageMo = new DataPageMo();
        dataPageMo.setProjectId(request.getProjectId());
        dataPageMo.setIsDeleted(0);
        dataPageMo.setDataPageMoId(request.getMoAndName());
        dataPageMo.setName(request.getMoAndName());
        dataPageMo.setCrfId(request.getCrfId());
        Page<CrfMo> all = dataPageMoDao.findAll(new Specification<CrfMo>() {
            @Override
            public Predicate toPredicate(Root<CrfMo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predicates = new ArrayList<>();
                Predicate name = criteriaBuilder.equal(root.get("name"), dataPageMo.getName());
                Predicate dataPageMoId = criteriaBuilder.equal(root.get("dataPageMoId"), dataPageMo.getDataPageMoId());
                Predicate projectId = criteriaBuilder.equal(root.get("projectId"), dataPageMo.getDataPageMoId());
                Predicate isDeleted = criteriaBuilder.equal(root.get("isDeleted"), dataPageMo.getIsDeleted());
                predicates.add(criteriaBuilder.and(projectId, isDeleted));
                if (StringUtils.isNotEmpty(request.getMoAndName())) {
                    return criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])), criteriaBuilder.or(name, dataPageMoId)).getRestriction();
                }
                return criteriaBuilder.and(projectId, isDeleted);
            }
        }, pageable);

        return new DataPageResponse(ObjectUtils.buildBatch(DataPageMoResponse.class, all.getContent()), all.getTotalElements());
    }

在这里插入图片描述

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值