在此权作为笔记

1. 创建PagingAndSortingRepository

import org.springframework.data.repository.PagingAndSortingRepository;
import com.wzw.springdata.model.Employee;

public interface EmployeeRepository4 extends PagingAndSortingRepository<Employee, Integer>{

}

2. 编写分页测试方法

@Test
    public void fun10() {
        //模拟分页请求-index从0开始
        Pageable pageable = new PageRequest(0, 10);
        System.out.println("pageable: " + pageable);
        Page<Employee> emps = er4.findAll(pageable);
        System.out.println("emps: " + emps);
        System.out.println("查询总页数: " + emps.getTotalPages());
        System.out.println("查询总记录数: "+ emps.getTotalElements());
        System.out.println("查询当前页数: " + emps.getNumber());
        System.out.println("查询当前页面的集合: " + emps.getContent());
        System.out.println("查询当前页面的记录数: " + emps.getNumberOfElements());
        System.out.println("分页一页数: " + emps.getSize());
    }

运行结果:

pageable: Page request [number: 0, size 10, sort: null]
Hibernate: 
    select
        employee0_.id as id1_0_,
        employee0_.age as age2_0_,
        employee0_.name as name3_0_ 
    from
        Employee employee0_ limit ?
emps: Page 1 of 1 containing com.wzw.springdata.model.Employee instances
查询总页数: 1
查询总记录数: 7
查询当前页数: 0
查询当前页面的集合: [Employee [id=1, name=root, age=18], Employee [id=2, name=test1, age=25], Employee [id=3, name=test12, age=18], Employee [id=4, name=test13, age=18], Employee [id=5, name=test121, age=18], Employee [id=6, name=test14, age=19], Employee [id=7, name=test2018, age=20]]
查询当前页面的记录数: 7
分页一页数: 10

3. 编写排序测试方法

@Test
    public void fun11() {
        //根据id进行降序(从大到小)
        Sort.Order order = new Sort.Order(Sort.Direction.DESC, "id");
        System.out.println("order: " + order);
        Sort sort = new Sort(order);
        System.out.println("sort: " + sort);

        //分页
        Pageable pageable = new PageRequest(0, 5, sort);
        System.out.println("pageable: " + pageable);
        Page<Employee> emps = er4.findAll(pageable);
        System.out.println("emps: " + emps);
        System.out.println("查询总页数: " + emps.getTotalPages());
        System.out.println("查询总记录数: "+ emps.getTotalElements());
        System.out.println("查询当前页数: " + emps.getNumber());
        System.out.println("查询当前页面的集合: " + emps.getContent());
        System.out.println("查询当前页面的记录数: " + emps.getNumberOfElements());
        System.out.println("分页一页数: " + emps.getSize());
    }

运行结果:

order: id: DESC
sort: id: DESC
pageable: Page request [number: 0, size 5, sort: id: DESC]
Hibernate: 
    select
        employee0_.id as id1_0_,
        employee0_.age as age2_0_,
        employee0_.name as name3_0_ 
    from
        Employee employee0_ 
    order by
        employee0_.id desc limit ?
Hibernate: 
    select
        count(employee0_.id) as col_0_0_ 
    from
        Employee employee0_
emps: Page 1 of 2 containing com.wzw.springdata.model.Employee instances
查询总页数: 2
查询总记录数: 7
查询当前页数: 0
查询当前页面的集合: [Employee [id=7, name=test2018, age=20], Employee [id=6, name=test14, age=19], Employee [id=5, name=test121, age=18], Employee [id=4, name=test13, age=18], Employee [id=3, name=test12, age=18]]
查询当前页面的记录数: 5
分页一页数: 5

4. PagingAndSortingRepository

BlogRepository定义了这样一个方法:Page findByDeletedFalse(Pageable pageable);,我们主要关注它的参数以及返回值。
Pageable 是Spring Data库中定义的一个接口,该接口是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息(例如pageNumber、pageSize等),这样,Jpa就能够通过pageable参数来得到一个带分页信息的Sql语句。
Page类也是Spring Data提供的一个接口,该接口表示一部分数据的集合以及其相关的下一部分数据、数据总数等相关信息,通过该接口,我们可以得到数据的总体信息(数据总数、总页数…)以及当前数据的信息(当前数据的集合、当前页数等)
Spring Data Jpa除了会通过命名规范帮助我们扩展Sql语句外,还会帮助我们处理类型为Pageable的参数,将pageable参数转换成为sql’语句中的条件,同时,还会帮助我们处理类型为Page的返回值,当发现返回值类型为Page,Spring Data Jpa将会把数据的整体信息、当前数据的信息,分页的信息都放入到返回值中。这样,我们就能够方便的进行个性化的分页查询。