【 jpa的模糊查询,条件查询,分页】

做项目需要进行该项操作
查询相关资料没有太过明白的讲解,
查询了接近的三份资料总结出较为完美的分页(具体的东西不懂只能实现功能)

先是实体类


@Data
@Entity
public class Goods implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer gid;
    private String gname;
    private Integer price;
    private Integer status;
    private String des;
    private String photo;
    private Integer discount;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="tid")
    private GoodsType goodsType;

}
------------------------------
@Data
@Entity
public class GoodsType implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer tid;
    private String tname;

}

再是dao层

public interface GoodsDao extends JpaRepository<Goods,Integer> {

  
	//进行分页的方法
    Page<Goods> findAll(Specification<Goods> specification, Pageable pageable);
	//不进行分页的方法
    List<Goods> findAll(Specification<Goods> specification);

}

最后是service层

@Component
public class Xxxx {
    @Resource
    private GoodsDao goodsDao;


	//pageNo:页数 pageSize:条目数 gname:对名字进行模糊查询 goodsType:商品类型
    public List<Goods> queryFlows(int pageNo, int pageSize, String gname, GoodsType goodsType) {
        List<Goods> result = null;
        Specification<Goods> specification=new Specification<Goods>() {
            @Override
            public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predicates=new ArrayList<Predicate>(10);
                if(gname!=null){
                        predicates.add(criteriaBuilder.like(root.get("gname"),"%"+gname+"%"));
                }
                if(goodsType!=null){
                        predicates.add(criteriaBuilder.equal(root.get("goodsType").as(GoodsType.class),goodsType));
                }
                return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
            }
        };

        try {
					//进行分页的判断
            if (pageNo == 0 && pageSize == 0) {
                result = goodsDao.findAll(specification);
            } else {
                result = goodsDao.findAll(specification, PageRequest.of(pageNo - 1, pageSize)).getContent();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

}

最后进行测试

@SpringBootTest
public class MyTest {
    @Resource
    private Xxxx xxxx;

    @Resource
    private GoodsTypeDao goodsTypeDao;
    @Resource
    private GoodsDao goodsDao;

    @Test
    public void xxxx(){
	
    GoodsType goodsType=goodsTypeDao.findById(1).get();
        System.out.println(this.xxxx.queryFlows(1,5,"米",goodsType));


    }
}

![测试结果](https://img-blog.csdnimg.cn/50060c45fe914207ada2b5d074a2c733.png#pic_center)




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值