1. 程式人生 > 其它 >JPA:條件查詢

JPA:條件查詢

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