SpringData分頁功能
在SpringData中實現分頁功能我們需要將介面實現 PagingAndSortingRepository 這個介面提供了分頁查詢的方法
Page<T> findAll(Pageable pageable); //分頁查詢(含排序功能)
@Test public void Pagination() { int pageIndex = 1;// 前臺傳過來的當前頁 int pageSize = 5;// 每頁需要的記錄數 /** * 不帶排序寫法: Pageable pageable = new PageRequest(pageIndex, pageSize); */ // 按照年齡欄位排序 Order order = new Order(Direction.DESC, "age"); Sort sort = new Sort(order); Pageable pageable = new PageRequest(pageIndex - 1, pageSize, sort); Page<Student> page = studentService.findAll(pageable); System.out.println("總記錄數:" + page.getTotalElements()); System.out.println("當前第幾頁:" + (page.getNumber() + 1)); System.out.println("總頁數:" + page.getTotalPages()); System.out.println("當前頁的List:" + page.getContent()); System.out.println("當前頁面的記錄數:" + page.getNumberOfElements()); for (Student student : page.getContent()) { System.out.println(student); } }
這樣就可以簡單的實現我們的分頁了,但是瞬時間發現這個分頁並不能帶條件啊。
SpringData中給我們提供了一個介面,我們只需要將我們Dao層介面實現 JpaSpecificationExecutor 就可以達到帶條件分頁的效果
@Test public void testJpaSpecificationExecutor(){ int pageIndex = 1; int pagesize = 0; PageRequest pagerequest = new PageRequest(pageIndex - 1, pagesize); Specification<Student> specification = new Specification<Student>() { @Override public Predicate toPredicate(Root<Student> root, CriteriaQuery<?> query, CriteriaBuilder cb) { /** * Root<Student>:表示查詢的實體 * CriteriaQuery:可以從中得到root物件,即告知JPA criteria查詢要查詢哪一個實體類。還可以來新增查詢條件。還可以結合EntityManager物件得到最終查詢的TypedQuery物件。 * CriteriaBuilder:用於建立Criteria相關物件的工廠。 */ //年齡屬性 Path<Integer> path = root.get("age"); Predicate predicate = cb.gt(path, 5);//大於5 return predicate; } }; Page<Student> page = studentDao.findAll(specification, pagerequest); }