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