JPA 查询构成器

/**
* 可进行查询的分页列表
*/
public Page<MessageConsumeFailLog> list(LogQueryParam param){
        Sort sort = new Sort( Sort.Direction.DESC ,"createTime");
        Pageable pageable = new PageRequest( param.getPageNo(), param.getPageSize(), sort );
        return messageConsumeFailLogRepository.findAll( (root, query, cb) -> listSpecification(root, cb, param), pageable );

    }
/**
* 分页列表的查询构成器
*/
 private Predicate listSpecification(Root<MessageConsumeFailLog> root,
                                        CriteriaBuilder cb,
                                        LogQueryParam param){
        List<Predicate> predicates = Lists.newArrayListWithExpectedSize(10);
        //消息队列名称
        if (!StringUtils.isEmpty(param.getQueueName())){
            predicates.add( cb.like( root.get( "queueName" ).as( String.class ), "%"+param.getQueueName()+"%"));
        }
        //关键词
        if (!StringUtils.isEmpty(param.getKeyWord())){
            predicates.add( cb.like( root.get( "keyWord" ).as( String.class ), "%"+param.getKeyWord()+"%"));
        }
        //关键内容
        if (!StringUtils.isEmpty(param.getKeyWordValue())){
            predicates.add( cb.like( root.get( "keyWordValue" ).as( String.class ), "%"+param.getKeyWordValue()+"%"));
        }
        //日志状态
        if (!Objects.isNull(param.getState())){
            predicates.add( cb.equal( root.get( "state" ).as( Integer.class ), param.getState()));
        }
        //开始时间 结束时间
        if (!Objects.isNull(param.getStartTime())&&!Objects.isNull(param.getEndTime())){
            //时间戳转Date
            Date startTime = new Date( param.getStartTime() );
            Date entTime = new Date( param.getEndTime() );
            predicates.add( cb.between( root.get( "createTime" ).as( Date.class ), startTime, entTime));
        }
        int size = predicates.size();
        return cb.and( predicates.toArray(new Predicate[size]) );
    }
相关文章
相关标签/搜索