Java中的Pageable接口通常用于分页查询,它定义了分页的基本信息,如页码、每页大小和排序方式。在Spring Data JPA中,Pageable接口有一个默认实现PageRequest,但有时我们可能需要对其进行扩展以满足特定需求。
以下是一个自定义Pageable接口的示例,我们添加了一个额外的参数groupBy:
public interface CustomPageable extends Pageable { String getGroupBy(); } 接下来,我们需要创建一个CustomPageable的实现类CustomPageRequest:
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; public class CustomPageRequest extends PageRequest implements CustomPageable { private final String groupBy; public CustomPageRequest(int page, int size, Sort sort, String groupBy) { super(page, size, sort); this.groupBy = groupBy; } @Override public String getGroupBy() { return groupBy; } } 现在我们可以在服务层使用CustomPageable来接收分页请求,并在repository层使用CustomPageRequest来创建分页请求。例如,在服务层:
@Service public class UserService { @Autowired private UserRepository userRepository; public Page<User> findUsers(CustomPageable pageable) { return userRepository.findAll(pageable); } } 在repository层:
public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> { default Page<User> findAll(CustomPageable pageable) { return findAll(new CustomPageRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort(), pageable.getGroupBy())); } } 这样,我们就可以根据自定义的CustomPageable接口来实现分页查询,同时支持额外的参数groupBy。当然,你可以根据实际需求对CustomPageable接口进行进一步的扩展。