zoukankan      html  css  js  c++  java
  • 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();
        }
    };
  • 相关阅读:
    Coroutine 协程
    jQuery Ajax calls and the Html.AntiForgeryToken()
    CSRF in asp.net mvc and ap.net core
    What is the difference between XSS and CSRF from their execution perspective?
    cocos2d制作动态光晕效果基础——blendFunc
    很有设计感的世界杯
    cocos2d-x (Android)之-那些常见的error记
    cocos2dx libcurl
    如何在遍历中使用 iterator/reverse_iterator 删除元素
    Android ndk下用AssetManager读取assets的资源
  • 原文地址:https://www.cnblogs.com/zuiyue_jing/p/15149511.html
Copyright © 2011-2022 走看看