在SpringBoot中使用Jpa中的JpaSpecificationExecutor实现动态分页

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hardtomakeaname/article/details/102630649

1.在BlogRepository中继承JpaRepository的同时继承JpaSpecificationExecutor<Blog>

2.

@GetMapping("/blogs")
public String blogs(@RequestParam(value = "page",defaultValue = "0") int page,
                    @RequestParam(value = "size",defaultValue = "8") int size,Model model,BlogQuery blog)
{
    Sort sort=new Sort(Sort.Direction.DESC,"id");

    Pageable pageable=new PageRequest(page,size,sort);







    model.addAttribute("types", typeRepository.findAll());
    model.addAttribute("page",  blogRepository.findAll(new Specification<Blog>() {
        @Override
        public Predicate toPredicate(Root<Blog> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {


            List<Predicate> predicates = new ArrayList<>();
            if (!"".equals(blog.getTitle()) && blog.getTitle() != null) {
                predicates.add(cb.like(root.<String>get("title"), "%"+blog.getTitle()+"%"));
            }
            if (null!=blog.getTypeId()) {
                predicates.add(cb.equal(root.<Type>get("type").get("id"), blog.getTypeId()));
            }
            if (blog.isRecommend()) {
                predicates.add(cb.equal(root.<Boolean>get("recommend"), blog.isRecommend()));
            }
            cq.where(predicates.toArray(new Predicate[predicates.size()]));


            return null;
        }
    },pageable));


    return "admin/blogs";
}


猜你喜欢

转载自blog.csdn.net/hardtomakeaname/article/details/102630649