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
接口进行进一步的扩展。