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();
    }
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM