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;
}
- spring data in方法的使用以及动态条件查询+分页
- spring data JPA 中带查询条件的分页in的用法
- Spring jpa data多条件分页查询
- spring data jpa 条件分页查询
- spring data jpa动态条件查询
- spring jpa动态条件查询并分页
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- EasyUi+Spring Data 实现按条件分页查询
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
- Hibernate动态查询设置分页的条件
- spring data 分页查询
- easyUi分页以及条件查询
- 使用jpa做分页查询 以及过滤的方法
- 关于Spring data JPA 如何使用条件查询。
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- spring data jpa的动态查询封装
- spring data jpa 分页查询
- 【HTML】- 鼠标悬停图片时切换查看器
- 深入理解JVM(三)——垃圾收集器
- postgre实现树状结构查询
- 剑指offer:把数列排成最小的数
- Docker安装及使用
- spring data in方法的使用以及动态条件查询+分页
- 了解“用户记忆理论”让你的工作事半功倍
- JAVA 与C# 的AES的加密函数、解密函数,加密解密结果一致
- JavaScript DOM(二)--DOM操作
- 武侠金曲
- Spring Data审计功能@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy的使用
- 05-树9 Huffman Codes (30分)
- STM32使用DMA从串口读可变长度数据到内存
- 如何快速有效的发散思维?