在此权作为笔记
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将会把数据的整体信息、当前数据的信息,分页的信息都放入到返回值中。这样,我们就能够方便的进行个性化的分页查询。