Spring Data Jpa使用——Specification条件查询使用方法(等于;大于;小于;in;not in;between)

背景

  • 在使用Spring Data Jpa中的Specification进行多条件查询时的各种条件处理

实例

  • 以下实例中的查询条件包括(等于;大于;小于;in;not in;between)
Specification<MinerExceptionTable> specification = new Specification<MinerExceptionTable>() {
    @SneakyThrows
    @Override
    public Predicate toPredicate(Root<MinerExceptionTable> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
        List<Predicate> predicateList = new ArrayList<>();

        /**
         * 相等===
         *
         * @参数 X
         * @参数类型  
         */
        if (StrUtil.isNotEmpty()) {
            predicateList.add(criteriaBuilder.equal(root.get("farmCode"), X));
        }

        /**
         * not in
         *
         * @参数 XXXX
         * @参数类型  List
         */
        if (CollUtil.isNotEmpty(XXXX)) {
            Predicate validDnaPredicate = root.get("dna").in(XXXX).not();
            predicateList.add(validDnaPredicate);
        }
        
        /**
         * in
         *
         * @参数 XXXX
         * @参数类型  List
         */
        if (CollUtil.isNotEmpty(XXXX)) {
            Predicate invalidDna = root.get("dna").in(XXXX);
            predicateList.add(invalidDna);
        }

        /**
         * 大于等于>=
         *
         * @参数 XX
         * @参数类型  数值
         */
        if (CollUtil.isNotEmpty(XX)) {
            predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("level"), XX));
        }
        
        /**
         * 小于等于<=
         *
         * @参数 XX
         * @参数类型 数值
         */
        if (CollUtil.isNotEmpty(XX)) {
            predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("level"), XX));
        }
        
        /**
         * betweeen 
         *
         * @参数 XX_1 ; XX_2
         * @参数类型  数值
         */
        if (CollUtil.isNotEmpty(XXX_1) && CollUtil.isNotEmpty(XXX_2)) {
            predicateList.add(criteriaBuilder.between(root.get("level"), XX_1, XX_2));
        }
        
        /**
         * 大于等于>=
         *
         * @参数 XXX
         * @参数类型  Date
         */
        if (CollUtil.isNotEmpty(XXX)) {
            predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("level").as(Date.class), XX));
        }
        
        /**
         * 小于等于<=
         *
         * @参数 XXX
         * @参数类型 Date
         */
        if (CollUtil.isNotEmpty(XXX)) {
            predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("level").as(Date.class), XX));
        }
        
        /**
         * betweeen 
         *
         * @参数 XXX_1 ; XXX_2
         * @参数类型  Date
         */
        if (CollUtil.isNotEmpty(XXX_1) && CollUtil.isNotEmpty(XXX_2)) {
            predicateList.add(criteriaBuilder.between(root.get("level").as(Date.class), XX_1, XX_2));
        }

        Predicate[] pre = new Predicate[predicateList.size()];
        pre = predicateList.toArray(pre);
        return criteriaQuery.where(pre).getRestriction();
    }
};

 

posted @ 2021-08-16 19:16  话·醉月  阅读(8474)  评论(0编辑  收藏  举报