基于SpringBoot和Vue3的博客平台文章列表与分页功能怎么实现

其他教程   发布日期:2025年01月18日   浏览次数:187

今天小编给大家分享一下基于SpringBoot和Vue3的博客平台文章列表与分页功能怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. 后端Spring Boot实现

我们将使用Spring Boot作为后端框架,并使用MySQL作为数据库。

1.1 修改ArticleMapper接口

为了支持分页功能,我们需要修改ArticleMapper.java文件,添加一个新方法findPage,同时更新findAll方法为findPage方法。

  1. @Mapper
  2. public interface ArticleMapper {
  3. List<Article> findPage(@Param("offset") int offset, @Param("pageSize") int pageSize);
  4. Article findById(Integer id);
  5. void insert(Article article);
  6. void update(Article article);
  7. void delete(Integer id);
  8. int count();
  9. }

1.2 修改ArticleService接口及实现

  1. ArticleService.java
文件中,将
  1. findAll
方法替换为
  1. findPage
方法,同时添加一个新方法
  1. count
  1. public interface ArticleService {
  2. List<Article> findPage(int offset, int pageSize);
  3. Article findById(Integer id);
  4. void create(Article article);
  5. void update(Article article);
  6. void delete(Integer id);
  7. int count();
  8. }

接着,在

  1. ArticleServiceImpl.java
文件中,修改对应的实现。
  1. @Service
  2. public class ArticleServiceImpl implements ArticleService {
  3. @Autowired
  4. private ArticleMapper articleMapper;
  5. @Override
  6. public List<Article> findPage(int offset, int pageSize) {
  7. return articleMapper.findPage(offset, pageSize);
  8. }
  9. // ...其他方法不变
  10. }

1.3 修改ArticleController类

  1. ArticleController.java
文件中,修改
  1. list
方法,接收
  1. page
  1. pageSize
参数,并调用
  1. findPage
  1. count
方法获取分页数据。
  1. @RestController
  2. @RequestMapping("/api/article")
  3. public class ArticleController {
  4. @Autowired
  5. private ArticleService articleService;
  6. @GetMapping
  7. public Result list(@RequestParam(required = false, defaultValue = "1") int page,
  8. @RequestParam(required = false, defaultValue = "10") int pageSize) {
  9. int offset = (page - 1) * pageSize;
  10. List<Article> articles = articleService.findPage(offset, pageSize);
  11. int totalCount = articleService.count();
  12. return Result.success("获取文章列表成功", new PageData<>(articles, totalCount, pageSize, page));
  13. }
  14. // ...其他方法不变
  15. }

2. 前端Vue3实现

2.1 修改文章列表页面组件

  1. ArticleList.vue
组件中,修改
  1. fetchArticles
方法,接收
  1. page
  1. pageSize
参数,并将数据显示在表格中。同时,添加
  1. <el-pagination>
组件实现分页。
  1. <template>
  2. <div>
  3. <el-table :data="articles">
  4. <el-table-column prop="id" label="ID" width="80"></el-table-column>
  5. <el-table-column prop="title" label="标题"></el-table-column>
  6. <el-table-column label="操作" width="180">
  7. <template v-slot="{ row }">
  8. <el-button @click="editArticle(row.id)">编辑</el-button>
  9. <el-button type="danger" @click="deleteArticle(row.id)">删除</el-button>
  10. </template>
  11. </el-table-column>
  12. </el-table>
  13. <el-pagination
  14. @size-change="handleSizeChange"
  15. @current-change="handleCurrentChange"
  16. :current-page="page"
  17. :page-sizes="[10, 20, 30, 40]"
  18. :page-size="pageSize"
  19. layout="total, sizes, prev, pager, next, jumper"
  20. :total="total">
  21. </el-pagination>
  22. </div>
  23. </template>
  24. <script>
  25. import { ref } from "vue";
  26. import axios from "axios";
  27. export default {
  28. setup() {
  29. const articles = ref([]);
  30. const total = ref(0);
  31. const page = ref(1);
  32. const pageSize = ref(10);
  33. const fetchArticles = async (page, pageSize) => {
  34. const response = await axios.get("/api/article", {
  35. params: {
  36. page: page,
  37. pageSize: pageSize
  38. }
  39. });
  40. articles.value = response.data.data.list;
  41. total.value = response.data.data.total;
  42. };
  43. const handleSizeChange = (val) => {
  44. pageSize.value = val;
  45. fetchArticles(page.value, pageSize.value);
  46. };
  47. const handleCurrentChange = (val) => {
  48. page.value = val;
  49. fetchArticles(page.value, pageSize.value);
  50. };
  51. const editArticle = (id) => {
  52. // 跳转到编辑页面
  53. };
  54. const deleteArticle = async (id) => {
  55. await axios.delete(`/api/article/${id}`);
  56. fetchArticles(page.value, pageSize.value);
  57. };
  58. fetchArticles(page.value, pageSize.value);
  59. return { articles, total, page, pageSize, handleSizeChange, handleCurrentChange, editArticle, deleteArticle };
  60. },
  61. };
  62. </script>

在这个修改后的ArticleList.vue组件中,我们添加了<el-pagination>组件以实现分页功能。当用户更改分页大小或当前页时,分别触发handleSizeChange和handleCurrentChange方法。这两个方法都会调用fetchArticles方法,根据当前页和分页大小重新获取文章列表数据。

以上就是基于SpringBoot和Vue3的博客平台文章列表与分页功能怎么实现的详细内容,更多关于基于SpringBoot和Vue3的博客平台文章列表与分页功能怎么实现的资料请关注九品源码其它相关文章!