使用带有mysql的spring MVC实现分页的最佳方法是啥

Posted

技术标签:

【中文标题】使用带有mysql的spring MVC实现分页的最佳方法是啥【英文标题】:what is the best way to implement pagination using spring MVC with mysql使用带有mysql的spring MVC实现分页的最佳方法是什么 【发布时间】:2012-08-06 07:27:16 【问题描述】:

在我的数据库中,我有超过 100,000 条记录,将来可能会更多。所以我想为此实现分页。它就像帖子一样,偶尔用户可以转到最旧或太旧的帖子。我使用的是spring MVC,数据库是mysql

我也使用 PagedListHolder 来实现分页。我想每页显示 25 个帖子,但如果我最初获取所有 100,000 个帖子,那么加载所有记录需要一些时间。如果我首先加载 100 条记录,然后将列表与另外 100 条记录合并等等,这样会更好吗?如果用户想查看最旧的帖子,则获取最后 100 个帖子并在最后一页显示最后 25 个帖子。

所以只是想知道如果有人可以帮助我给出正确的方向,这个解决方案是否可行。

【问题讨论】:

***.com/questions/2245035/… 我在***.com/questions/2245035/… 中使用 setFirstResult 和 setMaxResults(limit)。使用 start 和 limit 你可以计算从哪里开始获取数据以及多少。仍然不明白为什么要合并列表中的值而不是获取新记录。在我的实现中,我只获取要在当前页面中显示的记录数。如果您获取的值较少,您可以懒惰地获取某些页面的数据,但这种情况可以通过缓存或增加数据库中的连接数(对于大用户)来处理。 【参考方案1】:

如果您使用 ORM,Spring Data JPA 可以轻松提供开箱即用的分页功能。

需要分页的实体的 DAO 接口将扩展 PagingAndSortingRepository 接口,如:-

public interface BookRepository extends PagingAndSortingRepository<Book,Long>
      // methods other than plain CRUD can be declared here

分页操作的关键接口是Pageable。它的现成实现PageRequest 封装了分页输入,如最大结果大小、页码、大小、排序依据、排序方向、偏移量。

PageRequest 可以从处理程序方法中的请求属性中获取,并作为参数传递给存储库方法,例如:-

Page<Book> result = bookRepository.findAll(pageRequest);

返回类型Page,可以在视图层轻松迭代以呈现结果大小、结果总数、排序顺序、排序方向等细节。

我发现这个tutorial 很有帮助。

【讨论】:

以上是关于使用带有mysql的spring MVC实现分页的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

带有分页的 Spring Data 和 Native Query

如何在 Spring Data JPA 中使用带有分页的投影接口?

MyBatis物理分页的代码实现

带有分页的 Spring-Data FETCH JOIN 不起作用

带有分页的 Spring Data JPA 方法查询给了我一个错误

带有分页的MySql查询中的随机值