天天看點

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);
    }