pageable分页处理

分页查询方法

spring提供了page,pageable接口来帮助实现分页功能的实现。

在原先查询中,Repository层不需要定义findAll()方法,可以直接在service层对其进行调用。但如果需要查询全部数据具有分页功能,需要在Repository层进行重写。

Repository层:

//Repository贮藏库,完成sql数据库操作
public interface BookRepository extends JpaRepository<book,Long> {
    Page<book> findAll(Pageable pageable);
}

Service层

@Service
public class BookService {
    @Autowired
    private BookRepository bookRepository;

    //查询所有的书单信息————————原本的
    public List<book> findAll(){
        return bookRepository.findAll();
    }

    //分页查询所有的书单信息————————分页的
    public Page<book> findAllByPage(Pageable pageable){
        return bookRepository.findAll(pageable);
    }
}

Controller层

初始版:

@Controller
public class BookController {
    @Autowired
    private BookService bookService;

    @GetMapping("/books")
    public String getAll(@RequestParam(defaultValue = "0") int page,@RequestParam(defaultValue = "5") int size,Model model){
        Page<book> bookList=bookService.findAllByPage(PageRequest.of(page,size));
        model.addAttribute("page",bookList);
        return "bookList";
        //PageRequest.of(page,size)会自动与pageable中属性对应。
        //PageRequest是Pageable的实现类。用于构造分页查询需要的页码(从0开始)、每页行数、排序等.    
    }
}

自动绑定page参数版本(建议使用)

@Controller
public class BookController {
    @Autowired
    private BookService bookService;

    /*获取书单列表详情*/
    @RequestMapping("/books")
    public String list(@PageableDefault(size=5,sort={"id"},direction = Sort.Direction.DESC) Pageable pageable,
                       Model model){
        //用@PageableDefault规定了pageable每页大小为5,按id排序,倒序排列。
        //不需要再使用pageRequest来装填pageable。
        Page<book> bookList=bookService.findAllByPage(pageable);
        model.addAttribute("page",bookList);
        return "bookList"; //指向templates中的books.html
    }
}

最后是bookList.jsp页面中翻页按钮的设置,用到了thymeleaf模板。

当且仅当page.first为真,即当前页是第一页,《上一页》按钮不会显示。

当且仅当page.last为真,即当前页是最后一页,《下一页》按钮不会显示。

<nav>
     <ul class="pager">
         <li class="previous"><a href="#" th:href="@{'/books?page='+${page.number-1}}" th:unless="${page.first}">上一页</a></li>
         <li class="next"><a href="#" th:href="@{/books(page=${page.number}+1)}" th:unless="${page.last}">下一页</a></li>
     </ul>
</nav>

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值