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 @   话·醉月  阅读(9300)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示