zoukankan      html  css  js  c++  java
  • Jpa条件查询组合查询and 和 or同时用

    更多精彩文章欢迎关注公众号“Java之康庄大道”

    条件查询,各个条件之间是and并且&&关系,其中地理信息省市区县,例如河北省,要包括其下属所有城市,每个城市包括下属区县,只选择河北省时候,要查询的是河北省所有的,他们之间是or 或者 ||关系

    如果写sql,很好完成where t.id = 1 and t.name=‘hbs and (t.region='河北省‘ or t.region='石家庄市’........等等)

    如果JPA怎么写条件查询呢?

    感谢  https://blog.csdn.net/langyan122/article/details/80608383  这篇文章的作者。

    我的应用如下所示:

    public Page<Crossing> findAll(String crossingCode, String crossingName, Integer crossingType, Integer lightshape,
                String region, Pageable pageable) {
            
            Page<Crossing> pageList = getCrossingDao().findAll((root,query,cb)-> {
    
                    List<Predicate> list = new ArrayList<Predicate>();
                    if(crossingCode!=null && crossingCode!="") {
                        list.add(cb.like(root.get("code"), "%"+crossingCode+"%"));
                    }
                    if(crossingName!=null && crossingName!="") {
                        list.add(cb.like(root.get("name"), "%"+crossingName+"%"));
                    }
                    if(crossingType!=-1) {
                        list.add(cb.equal(root.get("crossingTypeId"), crossingType));
                    }
                    if(lightshape!=-1) {
                        list.add(cb.equal(root.get("lightshapeId"), lightshape));
                    }
                    
                    Predicate[] array = new Predicate[list.size()];
                    Predicate Pre_And = cb.and(list.toArray(array));
                    
                    List<Predicate> listOr = new ArrayList<Predicate>();
                    if(region!="") {
                        String arr[] = region.split(",");
                        for(int i=0;i<arr.length;i++) {
                            if(arr[i]!=null && arr[i]!="") {
                                listOr.add(cb.equal(root.get("regionId"), arr[i]));
                                
                            }
                        }
                        Predicate[] arrayOr = new Predicate[listOr.size()];
                        Predicate Pre_Or = cb.or(listOr.toArray(arrayOr));
                        return query.where(Pre_And,Pre_Or).getRestriction();
                    }else{
                        return null;
                    }
                        
                    
            }, pageable);

        return pageList; }

    遇到的困难,记载之;

  • 相关阅读:
    linux系统数据落盘之细节
    不同类型文件“可读写”的含义
    zz存储系统中缓存的三种类型
    library满(磁带紊乱、虚拟机恢复失败)
    TSM日常维护
    入门级磁带机使用方法
    关于 tsm 磁带槽位
    TSM lan-free原理及配置
    TSM中备份(Backup)和归档(Archive)的区别
    指定stg备份 (即指定tape 磁带)
  • 原文地址:https://www.cnblogs.com/yunqing/p/10001621.html
Copyright © 2011-2022 走看看