上一篇博客已经介绍了JPA的基本使用,这里我们就来学习一下如何在JPA中使用复杂的查询方法。
1.查询
在实际的开发中我们需要用到分页、删选、多表查询等查询的时候就需要特殊的方法或者自定义SQL
1.1分页查询
分页查询在实际使用中非常普遍了,spring data jpa已经帮我们实现了分页的功能,在查询的方法中,需要传入参数Pageable。从源码中我们不能发现,JpaRepository继承了PagingAndSortingRepository接口,该接口中提供了一个分页方法:,该方法只接收一个Pageable参数。
Page<T> findAll(Pageable var1);
我们先来看一下这个方法怎么使用吧。
细心的人会发现Pageable只是一个接口类,那么我们如何来使用呢?
翻看源码我们会发现有PageRequest、QPageRequest这两个类,它们的父类都实现了pageable接口。区别在于排序的不同,QPageRequest使用了Qsort方法,使用快排进行排序。
同样的我们通过postman来测试,先来看一下接口代码。
@GET
@Produces(TYPE_JSON)
@Path("pageSearch")
public Object pageSearch(@QueryParam("pageNum") int pageNum, @QueryParam("size") int size, @QueryParam("order") String order) {
Sort sort = new Sort(Sort.Direction.fromString(order), "id");
Pageable pageable = new PageRequest(pageNum, size, sort);
return personRepository.findAll(pageable);
}
接着我们来看一下调用结果:
先说明一下,数据库中一共有10条数据,id从1到10,从图上我们可以看到分页查询返回了详细的信息,有人会奇怪从第一页开始为什么显示的是5,6,7。这是因为在JPA的分页查询中页码下标是从0开始的,大家可以尝试一下把pageNum改为0试试。
2.限制查询
在做top排行榜的时候,我们该怎么编写方法呢?