Java中的Pageable
接口通常用于分頁查詢,它定義了分頁的基本信息,如頁碼、每頁大小和排序方式。在Spring Data JPA中,Pageable
接口有一個默認(rèn)實(shí)現(xiàn)PageRequest
,但有時我們可能需要對其進(jìn)行擴(kuò)展以滿足特定需求。
以下是一個自定義Pageable
接口的示例,我們添加了一個額外的參數(shù)groupBy
:
public interface CustomPageable extends Pageable {
String getGroupBy();
}
接下來,我們需要創(chuàng)建一個CustomPageable
的實(shí)現(xiàn)類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;
}
}
現(xiàn)在我們可以在服務(wù)層使用CustomPageable
來接收分頁請求,并在repository層使用CustomPageRequest
來創(chuàng)建分頁請求。例如,在服務(wù)層:
@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()));
}
}
這樣,我們就可以根據(jù)自定義的CustomPageable
接口來實(shí)現(xiàn)分頁查詢,同時支持額外的參數(shù)groupBy
。當(dāng)然,你可以根據(jù)實(shí)際需求對CustomPageable
接口進(jìn)行進(jìn)一步的擴(kuò)展。