美文网首页
JPA多条件查询

JPA多条件查询

作者: 木人呆呆 | 来源:发表于2021-04-13 16:13 被阅读0次

(1)多条件查询实现 对And 和Or的同时处理办法

直接贴代码

private Page<MCDemand> specificationQuery(Pageable pageable, String types,Map<String, ?> params){
        Specification<MCDemand> specification = (Specification<MCDemand>) (root, query, cb) -> {
            List<Predicate> list = new ArrayList<>(); // 所有的断言
            for (String key : params.keySet()) {
                list.add(cb.like(root.get(key).as(String.class), "%" + params.get(key).toString() + "%"));
            }
            Predicate predicateAnd = cb.and(list.toArray(new Predicate[list.size()]));
            List<Predicate> listOr = new ArrayList<>(); // 所有的断言
            List<String> strList = StringUtil.stringToList(types);
            for(String str:strList){
                listOr.add(cb.like(root.get("type").as(String.class),str));
            }
            Predicate predicateOR = cb.or(listOr.toArray(new Predicate[listOr.size()]));
            return query.where(predicateAnd,predicateOR).getRestriction();
        };
        return mcDemandRepository.findAll(specification, pageable);

使用上面代码块的方法,可以灵活实现复杂的条件查询。

(2)对于Boolean 值的查询处理办法

    private Page<Satellite> specificationQuery(Pageable pageable, Map<String, ?> params){
        Specification<Satellite> specification = (Specification<Satellite>) (root, query, cb) -> {
            List<Predicate> list = new ArrayList<>(); // 所有的断言
            for (String key : params.keySet()) {
                if("send".equalsIgnoreCase(key)){
                    if(params.get(key).toString().trim().equalsIgnoreCase("1")){
                        list.add(cb.equal(root.get(key),true));
                    }else if(params.get(key).toString().trim().equalsIgnoreCase("0")){
                        list.add(cb.equal(root.get(key),false));
                    }
                }else{
                    list.add(cb.like(root.get(key).as(String.class), "%" + params.get(key).toString() + "%"));
                }
            }
            Predicate[] p = new Predicate[list.size()];
            return cb.and(list.toArray(p));
        };
        return satelliteRepository.findAll(specification, pageable);
    }

其中对于Boolean的处理还是有些机械,需要传入参数 1或者0,进行判断。后续有更优雅的方式,将会补充进来更新。

相关文章

  • Spring Data JPA

    Spring Data JPA,一种动态条件查询的写法 我们在使用SpringData JPA框架时,进行条件查询...

  • JPA-复杂查询

    时间相关查询 Spring data jpa 条件查询-按时间段查询Jpa查询排序,时间范围查询,当天时间范围查询...

  • SpringBoot+Spring JPA基础使用

    Spring JPA集成基础查询实例复杂查询+分页一对多查询及多对多查询 1. Spring JPA集成 1.1 ...

  • Spring 随笔

    1.Spring JPA 条件查询 ``` @Override public ListgetJobsByAccou...

  • JPA多表分页动态多条件查询

    参考文章: 解决 JPA 多表动态查询 JPA EntityManager createNativeQuery 多...

  • JPA多条件查询

    (1)多条件查询实现 对And 和Or的同时处理办法 直接贴代码 使用上面代码块的方法,可以灵活实现复杂的条件查...

  • Spring Data JPA方法定义规范

    Spring Data Jpa方法定义的规则: (1)简单条件查询简单条件查询:查询某一个实体类或者集合。按照Sp...

  • Spring Data JPA方法名命名规则

    一、Spring Data Jpa方法定义的规则 简单条件查询 简单条件查询:查询某一个实体类或者集合。按照Spr...

  • Jpa的条件查询和分页

    简介 习惯了使用mybtais操作数据库。今天,尝试了下jpa的操作,但是遇到个问题,jpa的条件查询和分页查询该...

  • 日常坑我

    条件查询 jpa应该继承JpaSpecificationExecutor 5/31 java基础疯狂java...

网友评论

      本文标题:JPA多条件查询

      本文链接:https://www.haomeiwen.com/subject/bcrclltx.html