我想用Spring Data Mongo实现分页。有许多教程和文档建议使用PagingAndSortingRepository,如下所示:
StoryRepo extends PagingAndSortingRepository<Story, String>{}
因为PagingAndSortingRepository为分页查询提供api,我可以像以下一样使用它:
Page<Story> story = storyRepo.findAll(pageable);
我的问题是这里的findAll方法实际上是在哪里实现的?我需要自己编写实现吗? 实现StoryRepo的StoryRepoImpl需要实现这个方法吗?
答案 0 :(得分:14)
当您自动连接Spring对象PagingAndSortingRepository时,您不需要实现该方法,它会自动为您实现该方法。
请注意,由于您使用的是Mongodb,因此可以扩展MongoRepository。
然后在Spring中,使用以下命令启用分页:
@RequestMapping(value="INSERT YOUR LINK", method=RequestMethod.GET)
public List<Profile> getAll(int page) {
Pageable pageable = new PageRequest(page, 5); //get 5 profiles on a page
Page<Profile> page = repo.findAll(pageable);
return Lists.newArrayList(page);
答案 1 :(得分:6)
我通过编写自己的实现来实现它,就像这样:
List<Story> stories = null;
Query query = new Query();
query.with(pageable);
stories = getTemplate().find(query, Story.class);
long total = getTemplate().count(query, Story.class);
Page<Story> storyPage = new PageImpl<Story>(stories, pageable, total);
return storyPage;
我正在使用弹簧数据&amp; mongodb,使用mongo模板查询数据。
答案 2 :(得分:2)
要对查询进行分页,您可以使用以下内容:
{
"serviceErrorCode": 100,
"message": "Not enough permissions to access: GET /me",
"status": 403
}
有关详细信息,请参阅https://docs.spring.io/spring-data/mongodb/docs/1.2.0.RELEASE/reference/html/mongo.repositories.html
中示例6.6中的第二个查询答案 3 :(得分:1)
该方法由特定于商店的类实现。对于Spring Data JPA模块,它是SimpleJpaRepository
。您通常让DI容器为这些存储库接口创建实例。使用Spring,您可以通过在JavaConfig类上使用@EnableJpaRepository
或
<jpa:repositories base-package="com.acme.repositories" />
这将为repo创建一个代理实例,以便您可以将其注入您的客户端:
class MyClient {
@Inject
public MyClient(PersonRepository repository) {
…
}
}
答案 4 :(得分:1)
在Spring Data中,您使用Spring数据使用的命名约定创建一个接口并添加一个方法,该框架将生成该方法的实现。 为了实现分页,我在存储库中创建了此方法声明:
public interface PersonRepository extends MongoRepository<Person, ObjectId> {
Page<Person> findByName(String name, Pageable pageable);
}
然后,在我的服务中,我这样调用此方法:
Page<Person> persons = personRepository.findByName("Alex", PageRequest.of(0, 100));
此处,页面将包含100个元素。
答案 5 :(得分:0)
Query query1 = new Query();
Integer startIndex = page * size;
Integer endIndex = (page * size) + size;
List<dto> totalRecord = mongoOperation.find(query1, dto.class);
query1.limit((endIndex > totalRecord.size() ? totalRecord.size() : endIndex));
List<dto> responseList = mongoOperation.find(query1, dto.class);
int end = (endIndex > (totalRecord.size() - 1) ? totalRecord.size() - 1 : endIndex);
if (totalRecord.size() > 0 && end == 0)
end = 1;
if (totalRecord.size() > 0)
responseList = responseList.subList(startIndex, end);
int totalPages = totalRecord.size() / size + (totalRecord.size() % size == 0 ? 0 : 1);