spring data in方法的使用以及动态条件查询+分页

来源:互联网 发布:php房产中介网站源码 编辑:程序博客网 时间:2024/06/09 16:54

方便以后查阅加以记录:

spring data 动态条件查询+分页需要继承JpaSpecificationExecutor<T>,直接上代码:

service:

//返回一个Page类型的数组,方法第二个参数就是分页;

public Page<Goods> PageListByGoods(Specification<Goods> spec, Pageable pageable);

serviceImpl:

//我把Specification单独提了出来,重点看pageListWhere方法,

@Override
public Page<Goods> PageListByGoods(Specification<Goods> spec, Pageable pageable){

return goodsRepository.findAll(spec, pageable);
}

/**
* 商品列表筛选查询(分页、排序、条件)
* @param  store    关联店铺
* @param  type 商品类型
* @param goodsName商品名
* @param  classId                店内商品分类
*/
@Override
public Specification<Goods> pageListWhere(Store store,Integer type, String goodsName,Integer classId){


Specification<Goods> spec = new Specification<Goods>() {  
public Predicate toPredicate(Root<Goods> root,  
           CriteriaQuery<?> query, CriteriaBuilder cb) {  
    List<Predicate> predicate = new ArrayList<>();
    Predicate p = cb.equal(root.get("goods_store").as(Store.class), store); 
    //根据商品名字筛选
    Predicate  p1=null;
    if(goodsName!=null && !goodsName.equals("")){
     p1 = cb.like(root.get("goods_name"), "%"+goodsName+"%"); 
    }
   
    Predicate  p2=null;
    if(type!=null && type==1){
    //查询线上
    p2 = cb.equal(root.get("goods_choice_type"), 0);   
    }
    Predicate p3=null;
    if(type!=null && type==2){
    //查询线下
    p3 =cb.equal(root.get("goods_choice_type"), 1);
    }
    In<Integer> in=null;
    if(classId!=null && classId!=0){
    List<Object> list =userGoodsClassRepository.listBySQL("select goods_id from t_goods_ugc where class_id="+classId);
      in = cb.in(root.<Integer> get("id"));
       for (Object id : list) {
           in.value(StringUtils.null2Int(id));
       }
    }
    Predicate p4 =in;
       //把Predicate应用到CriteriaQuery中去,因为还可以给CriteriaQuery添加其他的功能,比如排序、分组啥的  
    Predicate preA = null;
            if(null!=p){
                Predicate  preS =cb.and(p);
                predicate.add(preS);
            }
            if(null!=p1){
                preA =cb.and(p1);
                predicate.add(preA);
            }
            if(null!=p2){
                preA =cb.and(p2);
                predicate.add(preA);
            }
            if(null!=p3){
                preA =cb.and(p3);
                predicate.add(preA);
            }
            if(null!=p4){
                preA =cb.and(p4);
                predicate.add(preA);
            }
            Predicate[] pre = new Predicate[predicate.size()];
       //添加排序的功能  
           query.where(predicate.toArray(pre));
       query.orderBy(cb.desc(root.get("goods_salenum")));  
       return query.getRestriction();   
   }
};
return spec;
}


阅读全文
0 0
原创粉丝点击