如何从春季数据REST中的页面获取列表
2022-09-03 08:52:05
我正在用于我的所有 CRUD 操作。最近我想实现排序,所以我继续.JPARespository
Pagable
问题是,我希望存储库方法返回对象,我在我的服务层中使用它们。List
我该如何做到这一点,有没有办法将这些对象转换为?Page
List
我正在用于我的所有 CRUD 操作。最近我想实现排序,所以我继续.JPARespository
Pagable
问题是,我希望存储库方法返回对象,我在我的服务层中使用它们。List
我该如何做到这一点,有没有办法将这些对象转换为?Page
List
如果您在jpa存储库方法中使用可分页,则spring将始终返回Page而不是List。我建议您有一个服务方法,该方法调用存储库方法并将Page结果的内容提取到列表中。
因此,如果您的存储库方法是:
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RecordRepository extends JpaRepository<Record, Integer>{
Page<Record> findAll(Pageable pageable);
}
然后你可以有一个服务类,它有一个调用存储库方法的方法
@Service
public class RecordService{
@Autowired
RecordRepository recordRepository;
public List<Record> findAll(PageRequest pageRequest){
Page<Record> recordsPage = recordRepository.findAll(pageRequest);
return recordsPage.getContent();
}
}
因此,在调用类中,而不是直接调用存储库,您可以只使用该服务。因此:
public class MyRecordImpl{
@Autowired
RecordService recordService;
public void doSomething(){
int page = 0; int pageSize = 5;
List<Record> recordList = recordService.findAll(new PageRequest(page, pageSize, new Sort(Sort.Direction.DESC, "recordId")));
//do other implementations here
}
}
一次获取所有结果的最简单方法是使用Pageable.unpaged(),如下所示:
Page<Employee> allEmployees = employeeRepository.findAll(Pageable.unpaged());
allEmployees.getContent();
但是,如果您担心一次检索太多数据,而是更喜欢以小块的形式进行检索,则可以使用类似于以下内容的服务或存储库方法:
private List<Employee> findAll() {
List<Employee> allEmployees = new ArrayList<>();
// First page of employees -- 5000 results per page
PageRequest pageRequest = PageRequest.of(0, 5000);
Page<Employee> employeePage = employeeRepository.findAll(pageRequest);
allEmployees.addAll(employeePage.getContent());
// All the remaining employees
while (employeePage.hasNext()) {
Page<Employee> nextPageOfEmployees = employeeRepository.findAll(employeePage.nextPageable());
allEmployees.addAll(nextPageOfEmployees.getContent());
// update the page reference to the current page
employeePage = nextPageOfEmployees;
}
return allEmployees;
}
查看此页面,了解以块形式获取数据的优缺点。