您好,登錄后才能下訂單哦!
今天小編給大家分享一下基于SpringBoot和Vue3的博客平臺文章列表與分頁功能怎么實現的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
我們將使用Spring Boot作為后端框架,并使用MySQL作為數據庫。
為了支持分頁功能,我們需要修改ArticleMapper.java文件,添加一個新方法findPage,同時更新findAll方法為findPage方法。
@Mapper public interface ArticleMapper { List<Article> findPage(@Param("offset") int offset, @Param("pageSize") int pageSize); Article findById(Integer id); void insert(Article article); void update(Article article); void delete(Integer id); int count(); }
在ArticleService.java
文件中,將findAll
方法替換為findPage
方法,同時添加一個新方法count
。
public interface ArticleService { List<Article> findPage(int offset, int pageSize); Article findById(Integer id); void create(Article article); void update(Article article); void delete(Integer id); int count(); }
接著,在ArticleServiceImpl.java
文件中,修改對應的實現。
@Service public class ArticleServiceImpl implements ArticleService { @Autowired private ArticleMapper articleMapper; @Override public List<Article> findPage(int offset, int pageSize) { return articleMapper.findPage(offset, pageSize); } // ...其他方法不變 }
在ArticleController.java
文件中,修改list
方法,接收page
和pageSize
參數,并調用findPage
和count
方法獲取分頁數據。
@RestController @RequestMapping("/api/article") public class ArticleController { @Autowired private ArticleService articleService; @GetMapping public Result list(@RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize) { int offset = (page - 1) * pageSize; List<Article> articles = articleService.findPage(offset, pageSize); int totalCount = articleService.count(); return Result.success("獲取文章列表成功", new PageData<>(articles, totalCount, pageSize, page)); } // ...其他方法不變 }
在ArticleList.vue
組件中,修改fetchArticles
方法,接收page
和pageSize
參數,并將數據顯示在表格中。同時,添加<el-pagination>
組件實現分頁。
<template> <div> <el-table :data="articles"> <el-table-column prop="id" label="ID" width="80"></el-table-column> <el-table-column prop="title" label="標題"></el-table-column> <el-table-column label="操作" width="180"> <template v-slot="{ row }"> <el-button @click="editArticle(row.id)">編輯</el-button> <el-button type="danger" @click="deleteArticle(row.id)">刪除</el-button> </template> </el-table-column> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> </template> <script> import { ref } from "vue"; import axios from "axios"; export default { setup() { const articles = ref([]); const total = ref(0); const page = ref(1); const pageSize = ref(10); const fetchArticles = async (page, pageSize) => { const response = await axios.get("/api/article", { params: { page: page, pageSize: pageSize } }); articles.value = response.data.data.list; total.value = response.data.data.total; }; const handleSizeChange = (val) => { pageSize.value = val; fetchArticles(page.value, pageSize.value); }; const handleCurrentChange = (val) => { page.value = val; fetchArticles(page.value, pageSize.value); }; const editArticle = (id) => { // 跳轉到編輯頁面 }; const deleteArticle = async (id) => { await axios.delete(`/api/article/${id}`); fetchArticles(page.value, pageSize.value); }; fetchArticles(page.value, pageSize.value); return { articles, total, page, pageSize, handleSizeChange, handleCurrentChange, editArticle, deleteArticle }; }, }; </script>
在這個修改后的ArticleList.vue組件中,我們添加了<el-pagination>組件以實現分頁功能。當用戶更改分頁大小或當前頁時,分別觸發handleSizeChange和handleCurrentChange方法。這兩個方法都會調用fetchArticles方法,根據當前頁和分頁大小重新獲取文章列表數據。
以上就是“基于SpringBoot和Vue3的博客平臺文章列表與分頁功能怎么實現”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。